AccountManager return 个空帐户

AccountManager return empty accounts

我有一个应用程序正在实现我自己的身份验证器,如 this 文章中所述。它按预期工作正常。现在我需要从 AccountManager 获取 google 帐户,我是这样做的:

 Account[] accounts = AccountManager.get(this).getAccountsByType("com.google");

问题是它 return 是一个空数组。但是当我在我的测试应用程序中使用这个代码片段而没有所有 Authenticator 东西时,它就像一个魅力。我看不出这些案例之间的实际区别在哪里。有人遇到过这个问题吗?

我的猜测是您缺少 GET_ACCOUNTS 权限。您可以在没有它的情况下获得您自己的应用程序的帐户,但访问其他帐户需要权限。

由于 runtime permissions,这几天在清单中简单地请求 GET_ACCOUNTS 有点复杂。现在您必须动态请求它们,并且向 GET_ACCOUNTS 的用户显示的消息非常神秘(它要求访问联系人,因为它是联系人权限组的一部分)。

您可能需要研究使用 AccountPicker(来自 Google Play 服务),它不需要任何权限。它会向用户显示一个对话框,其中包含请求的帐户(并提供添加新帐户的选项)。