2012-04-24 40 views
6

Tôi đang thử nghiệm với Android AccountManager.SecurityException khi cố gắng thêm tài khoản

Tôi có dịch vụ xác thực tài khoản hiển thị giao diện người dùng để nhập tên người dùng/mật khẩu.

Tôi chuyển đến Cài đặt/Tài khoản/Thêm tài khoản, chọn loại tài khoản mới của tôi và tôi được trình bày với giao diện người dùng.

Khi tôi bấm vào OK tôi nhận được lỗi sau

04-24 14:48:29.334: E/AndroidRuntime(386): java.lang.SecurityException: 
    caller uid 10035 is different than the authenticator's uid 

Phương pháp duy nhất của MyAccountAuthenticationService:

@Override 
public IBinder onBind(Intent intent) { 
    return new MyAccountAuthenticator(this).getIBinder(); 
} 

MyAccountAuthenticator:

@Override 
public Bundle addAccount(AccountAuthenticatorResponse response, 
    String accountType, String authTokenType, String[] requiredFeatures, 
    Bundle options) throws NetworkErrorException { 

    final Intent intent = new Intent(context, MyAccountCreatorActivity.class); 
    intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response); 
    final Bundle bundle = new Bundle(); 
    bundle.putParcelable(AccountManager.KEY_INTENT, intent); 
    return bundle; 
} 

Fragment của MyAccountCreatorActivity 's onClick

AccountManager accManager = AccountManager.get(this); 
Account newAccount = new Account(email, MyAccountAuthenticator.ACCOUNT_TYPE); 
accManager.setPassword(newAccount, password); 

Ngoại lệ được ném trên setPassword. Tôi đã yêu cầu tất cả các quyền kế toán. Tôi không chắc chắn về những gì có thể gây ra điều này. Nếu bạn cần thêm mã/thông tin, vui lòng hỏi.

Cảm ơn bạn.

+2

xem http://loganandandy.tumblr.com/post/613041897/caller-uid-is-different này có thể hữu ích –

+0

Bản sao có thể có của [SecurityException: người gọi uid XXXX khác với xác thực của uid] (http: // stackoverflow.com/questions/3774282/securityexception-caller-uid-xxxx-is-different-than-the-authenticators-uid) – rds

+0

@rds xin lỗi nó không phải là một sự lừa đảo. XML gốc có lỗi đánh máy, tuy nhiên Android sẽ không giải thích chính xác bản chất thực sự của vấn đề –

Trả lời

4

Nhờ @imran khan, tôi phát hiện ra rằng giá trị không đổi của tôi không phù hợp với "chính xác" những gì là trong định nghĩa xác thực XML

+0

Tôi không hiểu cách định nghĩa XML xác thực của bạn khác với câu trả lời về AndroidManifest. Bạn có phải phù hợp với AndroidManifest của bạn hoặc là câu trả lời ở nơi khác? – Danny

+0

nếu tôi nhập nhầm org.zighinetto.myapp.account là org.zighinetto.myap.account nó sẽ không hoạt động. Nó đơn giản được định nghĩa một cách trong XML và một cách khác trong mã (chuỗi cuối cùng tĩnh công cộng ... bạn biết ...) –

+0

Làm cho tinh thần. Cảm ơn! – Danny

17

vẻ hiển nhiên, nhưng bạn cũng sẽ thấy lỗi này nếu dịch vụ xác thực của bạn có không được xác định trong AndroidManifest.xml. Ví dụ:

<service android:name="your.AuthService"> 
    <intent-filter> 
     <action android:name="android.accounts.AccountAuthenticator" /> 
    </intent-filter> 
    <meta-data android:name="android.accounts.AccountAuthenticator" 
     android:resource="@xml/authenticator" /> 
</service> 
+0

Cảm ơn câu trả lời. Câu hỏi đã không nói rằng tôi đã viết XML, trong trường hợp đó với một trục trặc cú pháp –

1

Trong trường hợp của tôi, tôi đã vô tình xác định AuthenticatorService trong Tệp kê khai bên ngoài các thẻ <application>. Di chuyển tuyên bố bên trong <application> đã khắc phục sự cố. Hy vọng sẽ giúp ai đó.

3

Trong trường hợp của tôi, tôi gặp lỗi này khi tôi chạy hai hương vị khác nhau trên cùng một thiết bị. Người thứ hai đang cố gắng truy cập cùng một tài khoản như tài khoản đầu tiên, điều này gây ra lỗi.

+0

Tôi đã có cùng một vấn đề trên một điện thoại Android 5, mà tôi cố định bằng cách thay đổi tên kích thước hương vị, nhờ câu trả lời của bạn :) – matdev

Các vấn đề liên quan