android android-account accountpicker

android - Elija un correo electrónico utilizando AccountPicker.newChooseAccountIntent



android-account (2)

Después de excavar, finalmente terminé descargando todas las aplicaciones relacionadas (Outlook, linkedin, twitter ...) y descargando los tipos de cuenta usando el siguiente código:

public void pickUserAccount() { /*This will list all available accounts on device without any filtering*/ Intent intent = AccountPicker.newChooseAccountIntent(null, null, null, false, null, null, null, null); startActivityForResult(intent, REQUEST_CODE_PICK_ACCOUNT); } /*After manually selecting every app related account, I got its Account type using the code below*/ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_PICK_ACCOUNT) { // Receiving a result from the AccountPicker if (resultCode == RESULT_OK) { System.out.println(data.getStringExtra(AccountManager.KEY_ACCOUNT_TYPE)); System.out.println(data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME)); } else if (resultCode == RESULT_CANCELED) { Toast.makeText(this, R.string.pick_account, Toast.LENGTH_LONG).show(); } } }

Y estos son los siguientes resultados que obtuve:

  • Outlook (Hotmail, Live): com.outlook.Z7.eas
  • LinkedIn: com.linkedin.android
  • Facebook: com.facebook.auth.login
  • Twitter: com.twitter.android.auth.login
  • Todas las demás cuentas de correo electrónico de Imap utilizadas en la aplicación de correo de Android: com.google.android.legacyimap (Gracias a Ozbek)
  • y por supuesto Google: com.google

Todavía me falta el tipo de cuenta de yahoo, porque la aplicación de correo de yahoo siguió fallando en mi dispositivo.

Por lo tanto, espero que si tienes el tipo de cuenta de yahoo, compártela.

REVISIÓN 7-12-2015 con una mejor solución

Pattern emailPattern = Patterns.EMAIL_ADDRESS; Account[] accounts = AccountManager.get(getActivity()).getAccounts(); ArrayList<String> emails = new ArrayList<String>(); for (Account account : accounts) { if (emailPattern.matcher(account.name).matches()) { emails.add(account.name); } }

Estoy intentando que el usuario elija una cuenta de correo electrónico con el siguiente código:

Intent intent = AccountPicker.newChooseAccountIntent(null, null, new String[]{"com.google"}, false, null, null, null, null); startActivityForResult(intent, 23);

Este código funciona muy bien, pero si el usuario no tiene una cuenta de Gmail pero sí Yahoo, Hotmail, etc. ¿Cómo puedo mostrar todas las cuentas de correo electrónico cambiando el tercer parámetro?

new String[]{"com.google"}

Muchas gracias


Según los documentos, el tercer parámetro es allowableAccountTypes :

allowableAccountTypes

una matriz de cadenas opcional de tipos de cuenta. Se utilizan tanto para filtrar las cuentas mostradas como para filtrar la lista de tipos de cuentas que se muestran al agregar una cuenta.

Para las cuentas IMAP en la aplicación de correo electrónico, ese tipo se devuelve como "com.google.android.legacyimap" (no registre los detalles de las cuentas en producción) :

AccountManager accountManager = AccountManager.get(getApplicationContext()); Account[] accounts = accountManager.getAccountsByType(null); for (Account account : accounts) { Log.d(TAG, "account: " + account.name + " : " + account.type); }

Eso es usar (agregar todos los tipos de cuenta que necesita a la matriz)

Intent intent = AccountPicker.newChooseAccountIntent(null, null, new String[] {"com.google", "com.google.android.legacyimap"}, false, null, null, null, null);

está regresando siguiendo en mi dispositivo:

Tenga en cuenta que la clase AccountPicker es parte del paquete de servicios de Google Play, se podría usar AccountManager.newChooseAccountIntent() (agregado en el nivel de API 14) y obtener los mismos resultados.

Espero que esto ayude.