在Android 7之前,可以使用以下类似的方法轻松获取此信息:
Account[] accounts = AccountManager.get(getContext())
.getAccountsByType("com.google")
但是随着 Oreo
的发布,这种方式不再可行。
编辑:请查看官方信息: 在 Android 8.0(API 级别 26)中,应用程序不能再访问用户帐户,除非验证器拥有该帐户或用户授予该访问权限。GET_ACCOUNTS 权限已不再足够。为了获得对帐户的访问权限,应用程序应该使用 AccountManager.newChooseAccountIntent() 或验证器特定的方法。获得帐户访问权限后,应用程序可以调用 AccountManager.getAccounts() 来访问它们。 Android 8.0 弃用 LOGIN_ACCOUNTS_CHANGED_ACTION。应用程序应改为使用 addOnAccountsUpdatedListener() 在运行时获取有关帐户的更新。 有关帐户访问和可发现性的新 API 和方法的信息,请参阅本文档的新 API 部分中的 Account Access and Discoverability
我花了半天时间寻找解决方案,但没有成功。
我找到了一些资料,声称现在唯一访问账户的方法是像这样使用 AccountPicker
:
AccountPicker.newChooseAccountIntent(null, null, new String[]{"com.google"},true, null, null, null, null);
但这确实回答了我的问题。明确地说,我只需要知道某种类型的帐户是否存在(Google,三星...),我不需要知道有多少个,也不需要帐户信息。