2012-04-24 16 views
6

Estoy experimentando con Android AccountManager.SecurityException al intentar agregar una cuenta

Tengo un servicio de autenticación de cuenta que muestra la interfaz de usuario para ingresar el nombre de usuario/contraseña.

Voy a Configuración/Cuentas/Agregar cuenta, elijo mi nuevo tipo de cuenta y me aparece la IU.

cuando hago clic en OK me sale el siguiente error

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

El único método de 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; 
} 

Fragmento de MyAccountCreatorActivity 's onClick

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

Se emite excepción en setPassword. Ya solicité todos los permisos de contabilidad. No estoy seguro de lo que podría estar causando esto. Si necesita más código/información, pregunte.

Gracias.

+2

vea esto http://loganandandy.tumblr.com/post/613041897/caller-uid-is-different Quizás sea útil –

+0

Posible duplicado de [SecurityException: el usuario que llama XXXX es diferente del uid del autenticador] (http: // stackoverflow.com/questions/3774282/securityexception-caller-uid-xxxx-is-different-than-the-authenticators-uid) – rds

+0

@rds lo siento, no es una tontería. El XML original tenía un error tipográfico, sin embargo, Android no le explicará exactamente la naturaleza real del problema. –

Respuesta

4

Gracias a @imran Khan, descubrí que mi valor constante no coincide "exactamente" lo que había en la definición XML autenticador

+0

No entiendo cómo su "definición XML del autenticador" es diferente de la respuesta sobre el AndroidManifest. ¿Tenía que coincidir con su AndroidManifest o era la respuesta en otro lugar? – Danny

+0

si escribo mal org.zighinetto.myapp.account como org.zighinetto.myap.account, no funcionará. Simplemente se definió de una manera en el XML y de otra manera en el código (cadena estática pública final ... ya sabes ...) –

+0

Tiene sentido. ¡Gracias! – Danny

17

parece obvio, pero también se verán este error si su servicio no tiene autenticador sido definido en AndroidManifest.xml. Por ejemplo:

<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

Gracias por la respuesta. La pregunta no indicaba que ya escribí el XML, en ese caso con una falla de sintaxis –

1

En mi caso he definido accidentalmente AuthenticatorService en el Manifiesto fuera de los <application> etiquetas. Mover la declaración dentro de <application> solucionó el problema. Hope ayudará a alguien.

3

En mi caso, recibí este error cuando ejecuté dos sabores diferentes en el mismo dispositivo. El segundo intentaba acceder a la misma cuenta que el primero, lo que provocó el error.

+0

Tuve el mismo problema en un teléfono Android 5, que arreglé cambiando el nombre de la dimensión de sabor, gracias a su respuesta :) – matdev

Cuestiones relacionadas