Как восстановить зарегистрированную учетную запись Google на телефонах Android?
Я занимаюсь разработкой приложения для Android, и мне нужно получить учетную запись Google, которая используется на телефоне. Я хочу сделать это для C2DM, но я не хочу просить пользователя войти в его / ее учетную запись электронной почты Google, если они уже вошли в систему. Есть ли способ сделать это?
2 ответа
Примерно так должно работать:
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;
}
}
И вам понадобится следующее разрешение в вашем манифесте:
<uses-permission android:name="android.permission.GET_ACCOUNTS"></uses-permission>
Не забудьте "Запросить разрешения во время выполнения", если вы поддерживаете Android 6 и более поздние версии https://developer.android.com/training/permissions/requesting.html
Я написал это по памяти, так что, возможно, потребуется немного настроить. Очевидно, что теперь можно зарегистрироваться без адреса электронной почты, поэтому, возможно, сделайте некоторые регулярные выражения для данных, чтобы убедиться, что это действительно адрес электронной почты (убедитесь, что он содержит @gmail или @googlemail)
У меня есть попытка ниже области, чтобы получить адрес электронной почты и имя пользователя
Получить учетную запись Google на вашем мобильном телефоне
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;
}
Получите имя пользователя аккаунта Google на свой мобильный
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;
}
}
объявите разрешения для вашего файла mainfest.
<uses-permission android:name="android.permission.GET_ACCOUNTS" />