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

标签 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。

我的代码有什么问题?

最佳答案

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

This method requires the caller to hold the permission AUTHENTICATE_ACCOUNTS and to have the same UID as the account's authenticator.

关于android从客户经理那里获取gmail用户名和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7639752/

相关文章:

mysql - 尽管条目不同,但密码不是 md5 或发生变化

Android Studio 2.2 或用于 NDK 支持的实验性 Gradle 插件?

android - InstantiationException:无法实例化 fragment 确保类名存在,是公共(public)的,并且有一个空的公共(public)构造函数

java - 解密加密消息摘要时出现非法 block 大小异常

Java-字符串索引越界异常 "String index out of Range"

r - 在 Shiny 的应用程序和多个页面中进行身份验证

java - 如何从 URL 图像 Nougat 及以上操作系统版本设置自定义通知图标?

java - 纬度/经度返回 0

Python 只打印引发异常的回溯

iphone - 通过iPhone访问mysql的password()哈希值