在我的应用程序中,我需要知道是否有任何 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);
但这确实解决了我的问题。需要明确的是,我只需要知道是否存在某种类型的帐户(谷歌、三星...),我不需要知道如果存在的话有多少,也不需要帐户信息。