Я разрабатываю приложение для Android, и мне нужно получить учетную запись Google, используемую на телефоне. Я хочу сделать это для C2DM, но я не хочу просить пользователя войти в его/ее учетную запись электронной почты Google, если они уже вошли в систему. Есть ли способ сделать это?
Как получить зарегистрированную учетную запись Google на телефонах Android?
Ответ 1
Что-то вроде этого должно работать:
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)
Ответ 2
Я попробую ниже области, чтобы получить адрес электронной почты и имя пользователя
Получить учетную запись 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" />