我有一个 Android 应用程序,它通过托管 Play 商店部署到我公司的 Android Enterprise 用户。每个用户的设备上都有一个工作资料。此帐户的电子邮件地址是用户的工作电子邮件地址。
该应用程序需要访问用户的工作电子邮件地址才能将用户数据同步到服务器。
在运行 8 (Oreo) 之前的 Android 版本的设备上,此代码运行良好:
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()
长度始终为零。
谷歌记录了这种行为变化:(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 将此属性提供给应用程序?或者还有其他方法可以获取用户的工作邮箱吗?