【发布时间】:2017-09-29 19:54:58
【问题描述】:
在我的应用中,我需要知道是否有任何 Google 帐户或任何三星帐户。
在 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 部分中的帐户访问和可发现性
我花了半天时间寻找解决我需要的方法,但没有成功。
我发现信息声称现在访问帐户的唯一方法是像这样使用AccountPicker:
AccountPicker.newChooseAccountIntent(null, null, new String[]{"com.google"},true, null, null, null, null);
但这确实解决了我的问题。需要明确的是,我只需要知道是否存在某种类型的帐户(Google、Samsung...)我不需要知道有多少,也不需要帐户信息。
【问题讨论】:
-
“这不再起作用”是什么意思?您能否提供一些代码、日志或堆栈跟踪,无论您看起来是否相关,以便社区能够为您提供帮助?
-
我的意思是 getAccount() 方法不再返回帐户数据,除非是链接到应用程序的帐户。
-
以下是来自官方文档的更多详细信息:在 Android 8.0(API 级别 26)中,应用程序无法再访问用户帐户,除非身份验证器拥有帐户或用户授予该访问权限。
-
@Steeve Favre 你能分享一下这个链接吗?请告诉你如何解决这个问题。
-
请看我的回答。这就是你让它工作的方式
标签: java android android-8.0-oreo