У меня есть приложение Android, которое развернуто для пользователей Android Enterprise в моей компании через управляемый магазин Play Store.У каждого пользователя есть рабочий профиль на своем устройстве.Адрес электронной почты этой учетной записи является рабочим адресом электронной почты пользователя.
Приложению требуется доступ к рабочему адресу электронной почты пользователя для синхронизации пользовательских данных с сервером.
На устройствах под управлением версийAndroid до 8 (Oreo), этот код прекрасно работает:
AndroidManifest.xml
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
Код
public String getUserEmail() {
AccountManager manager = AccountManager.get(this);
Account[] accounts = manager.getAccounts();
List<String> emails = new ArrayList<String>();
// On Oreo+, the length of accounts is 0.
for (Account account : accounts) {
if (account.name.endsWith("@companyname.com")) {
emails.add(account.name);
}
}
if (!emails.isEmpty() && emails.get(0) != null) {
return emails.get(0);
}
return null;
}
В Oreo и выше результат AccountManager.getAccounts()
всегда имеет нулевую длину.
Это изменение поведения задокументировано Google: (https://developer.android.com/about/versions/oreo/android-8.0-changes.html#aaad). Разрешение GET_ACCOUNTS
больше не достаточно для получения учетных записей, и мы должны использовать AccountManager.newChooseAccountIntent()
.
Этонежелательно, потому что я не хочу, чтобы пользователь выбирал нерабочую учетную запись для использования с этим приложением. Мне нужен только рабочий адрес электронной почты.
Существует ли способ для приложения Android Enterprise получить пользователярабочий адрес электронной почты без использования AccountManager.newChooseAccountIntent()
? Может ли администратор EMM сделать это свойство доступным для приложения через Android Enterprise SDK? Или есть другой способ получить рабочий адрес электронной почты пользователя?