2010-08-26 9 views
10

He estado experimentando con el SDK de Android en los últimos días, listo para escribir una aplicación para la tienda, sin embargo, me he encontrado con un problema .Programemente iniciando la actividad 'Añadir cuenta' en Android 2.2

La aplicación que voy a escribir requiere que el usuario tenga una cuenta de Google asociada con el teléfono. Retirar y hacer uso del token Auth, etc. no fue un problema, sin embargo, me gustaría poder mostrar la actividad que un usuario alcanzaría normalmente yendo a través de los menús Configuración -> Cuentas -> Agregar cuenta.

Ahora, a través de la experimentación, he podido iniciar esta actividad desde el shell utilizando el siguiente comando.

am start -n com.google.android.gsf/.login.AccountIntroActivity 

Tengo problemas para realizar la misma acción en JAVA utilizando la clase Intención.

¿Alguien podría decirme en primer lugar si esto se puede hacer o no a través de JAVA, y en segundo lugar, cómo podría hacerlo por favor?

Si tengo que conformarme con la pantalla Sync Settings, lo haré (esto puede lograrse a través del ajuste Setting.ACTION_SYNC_SETTINGS), sin embargo sería bastante agradable poder dirigir al usuario directamente a la pantalla requerida.

Respuesta

15

Mira la ACTION_ADD_ACCOUNT

startActivity(new Intent(Settings.ACTION_ADD_ACCOUNT)); 
+0

Mi agradecimiento - que es un paso más cerca de lo que estoy tratando de lograr, sin embargo, para citar a nuestros maestros Jedi - 'esto es no es la actividad que estás buscando '. Es el siguiente paso en la cadena que estoy tratando de invocar, parte del asistente de instalación, la actividad que aparece al hacer clic en el símbolo de la cuenta de Google. Si esto es imposible, me quedaré con la respuesta ACTION_ADD_ACCOUNT. Gracias – Seidr

+0

Probablemente es imposible porque no veo en el recurso vinculado. Y esa es la única página que describe la configuración global. – Pentium10

+0

Eso es lo que temía: imagino que el acceso al componente al que llamo desde adb shell (com.google.android.gsf/.login.AccountIntroActivity) probablemente esté restringido de alguna manera. – Seidr

3

Pruebe lo siguiente:

public static void addGoogleAccount(final Activity activity) { 
    final AccountManager accountMgr = AccountManager.get(activity); 
    accountMgr.addAccount("com.google", "my_auth_token", null, null, activity, null, null); 
} 
+0

Gracias markjan - Lo veré una vez que haya recuperado la configuración de mi SDK. – Seidr

+0

"my_auth_token" ¿es un tipo de token de autenticación válido para la cuenta de Google? Si no, ¿puede decirme un tipo de token de autenticación válido para agregar una cuenta de Google? – sdream

1

La pista está en su comando shell:

Intent intent = new Intent(); 
    intent.setClassName("com.google.android.gsf", "com.google.android.gsf.login.AccountIntroActivity"); 
    context.startActivity(intent); 
2

Account Manager Android proporciona una API para agregar la cuenta . (Google u otros tipos de cuenta)

pública AccountManagerFuture addAccount (String accountType, Cadena authTokenType, String [] requiredFeatures, addAccountOptions Bundle, actividad actividad, AccountManagerCallback de devolución de llamada, manejador Handler)

http://developer.android.com/reference/android/accounts/AccountManager.html

1

la respuesta para la pregunta anterior al proporcionar EXTRA_ACCOUNT_TYPES en los datos adicionales de intención. y establecer el valor a "com.google" con el fin de alertar a la actividad:

public static void startAddGoogleAccountIntent(Context context){ 
Intent addAccountIntent = new Intent(android.provider.Settings.ACTION_ADD_ACCOUNT) 
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
addAccountIntent.putExtra(Settings.EXTRA_ACCOUNT_TYPES, new String[] {"com.google"}); 
context.startActivity(addAccountIntent); } 
Cuestiones relacionadas