从账户管理器获取Android Gmail用户名和密码

5
我正在为Android编写一个GMail客户端。我想在ListView中列出所有的GMail账户。当用户点击其中一个账户时,我希望程序能够检索相应账户的密码。
然而,我遇到了一个SecurityException异常。
java.lang.SecurityException: caller uid 10107 is different than the authenticator's uid

这是我的代码:

AccountManager accountManager = AccountManager.get(context);

this.username = account.name;
this.password = accountManager.getPassword(account); //this is where I get the exception

我有AndroidManifest.xml中的所有这些权限:
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"></uses-permission>
<uses-permission android:name="android.permission.GET_ACCOUNTS"></uses-permission>
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"></uses-permission>
<uses-permission android:name="android.permission.USE_CREDENTIALS"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

根据Android参考文档,唯一需要的权限应该是MANAGE_ACCOUNTS。
我的代码有什么问题?
1个回答

4
您可以获得一个认证令牌,但无法获取用户的实际凭据。实际的凭据只能被创建它们的应用程序访问。从getPassword方法的文档中可以看到(重点是我的):
“此方法要求调用者持有权限AUTHENTICATE_ACCOUNTS,并具有与帐户验证器相同的UID。”

1
听起来很不错,我觉得现在更安全了。谢谢 Kurtis。 - b101101011011011

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接