android从客户经理获取gmail用户名和密码

时间:2011-10-03 19:33:22

标签: android exception passwords accountmanager

我正在为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 reference,唯一需要的权限应该是MANAGE_ACCOUNTS。

我的代码有什么问题?

1 个答案:

答案 0 :(得分:4)

您可以获得authtoken,但无法获得用户的实际凭据。实际的信用只能由创建它们的应用程序访问。从getPassword方法的文档(强调我的):

  

此方法要求调用者持有权限AUTHENTICATE_ACCOUNTS并使与帐户的身份验证器相同的UID