3

我想检索我的 Android 手机中关联的所有帐户(Facebook、Dropbox、Gmail 等)的密码……我尝试了下面的编码,但无法获取密码……

    AccountManager am = AccountManager.get(this);
    Account [] acc = am.getAccounts();
    if (acc.length > 0){
        for (int i=0; i<acc.length; i++){
            String password = am.getPassword(acc[i]);
            listedAcc += acc[i] + " Password:" + password.toString() + "\n\n";
        }
        accounts.setText(listedAcc.toString());

有人可以帮我解决这个问题...谢谢

4

3 回答 3

4

你不可以做这个

只有使用与 facebook/gmail/../other 帐户的身份验证器相同的 UID 的应用程序才能调用此方法。其他应用程序将始终收到错误消息。

的文档getPassword()说:

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

我认为这句话的最后一部分对你的情况很重要。您正在尝试获取尚未为其编写 Authenticator 的帐户的密码。Authenticator 定义了如何对某个服务进行身份验证。只有身份验证器或使用相同 UID 的应用程序才允许调用 getPassword() 方法。通过这一限制,可以确保没有人可以窃取用户的帐户凭据。

于 2012-11-06T07:30:10.110 回答
2

您将获得安装在 android 手机中的 gmail 和电子邮件应用程序的帐户详细信息。我的意思是您将仅获得默认应用程序帐户详细信息。您将无法获取这些帐户的密码。但是在根设备中,您将获得密码。但无根设备不会让你抓住它,因为它违反隐私。

代码片段。

AccountManager manager = (AccountManager) getSystemService(ACCOUNT_SERVICE);
Account[] list = manager.getAccounts();
String gmail = null;

    for(Account account: list)
    {
        if(account.type.equalsIgnoreCase("com.google"))
        {
            gmail = account.name;
            break;
        }
    }

需要使用许可:

    <uses-permission android:name="android.permission.GET_ACCOUNTS"></uses-permission>
于 2012-11-06T07:23:11.050 回答
1

来自方法 API:Api

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

于 2012-11-06T07:20:21.867 回答