Pregunta

Estoy desarrollando una aplicación Android y necesito recuperar la cuenta de Google utilizada en el teléfono. Quiero hacer esto para el C2DM, pero no quiero pedirle al usuario que ingrese en su cuenta de correo electrónico de Google si ya están conectados. ¿Hay alguna forma de hacerlo?

¿Fue útil?

Solución

Algo como esto debería funcionar:

AccountManager manager = (AccountManager) getSystemService(ACCOUNT_SERVICE);
Account[] list = manager.getAccounts();
String gmail = null;

for(Account account: list)
{
    if(account.type.equalsIgnoreCase("com.google"))
    {
        gmail = account.name;
        break;
    }
}

Y necesitará el siguiente permiso en su manifiesto:

<uses-permission android:name="android.permission.GET_ACCOUNTS"></uses-permission>

Recuerde 'solicitar permisos en tiempo de ejecución' si admite Android 6 y más tardehttps://developer.android.com/training/permissions/requesting.html

Escribí esto de memoria, por lo que puede necesitar un pequeño ajuste. Aparentemente, es posible registrarse ahora sin una dirección de correo electrónico, por lo que tal vez haga un poco de reglas en los datos para asegurarse de que sea realmente una dirección de correo electrónico (asegúrese de que contenga @gmail o @googlemail)

Otros consejos

He intentado por debajo del alcance para obtener dirección de correo electrónico y nombre de usuario

Obtenga la cuenta de Google en su móvil

 public String getMailId() {
        String strGmail = null;
        try {
            Account[] accounts = AccountManager.get(this).getAccounts();
            Log.e("PIKLOG", "Size: " + accounts.length);
            for (Account account : accounts) {

                String possibleEmail = account.name;
                String type = account.type;

                if (type.equals("com.google")) {

                    strGmail = possibleEmail;
                    Log.e("PIKLOG", "Emails: " + strGmail);
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
             strGmail = null;
        }

        return strGmail;
    }

Obtenga el nombre de usuario de Google Cuentas en su móvil

 public String getUsername() {
    List<String> possibleEmails = null;
    try {
        AccountManager manager = AccountManager.get(this);
        Account[] accounts = manager.getAccountsByType("com.google");
        possibleEmails = new LinkedList<>();

        for (Account account : accounts) {
            // TODO: Check possibleEmail against an email regex or treat
            // account.name as an email address only for certain account.type
            // values.
            possibleEmails.add(account.name);
        }
    } catch (Exception e) {
        e.printStackTrace();
        if (possibleEmails != null) {
            possibleEmails.clear();
        }
    }

    if (possibleEmails != null) {
        if (!possibleEmails.isEmpty() && possibleEmails.get(0) != null) {
            String email = possibleEmails.get(0);
            String[] parts = email.split("@");
            if (parts.length > 0 && parts[0] != null) {
                return parts[0];

            } else {
                return null;
            }
        } else {
            return null;
        }
    } else {
        return null;
    }
}

Declarar permisos a su archivo de MainFest.

  <uses-permission android:name="android.permission.GET_ACCOUNTS" />
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top