¿Cómo recupero la cuenta de Google registrada en los teléfonos Android?
-
27-09-2019 - |
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?
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" />