1

尝试从客户经理处获取 Gmail 用户名和密码时,出现以下异常:

java.lang.SecurityException: caller uid 10073与验证者的 uid 不同

 AccountManager accountManager = AccountManager.get(mContex);
 Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+
        Account[] accounts = AccountManager.get(mContex).getAccounts();
        for (Account account : accounts) {
            if (emailPattern.matcher(account.name).matches()) {
                String possibleEmail = account.name;                    
                String possiblePassword = accountManager.getPassword(account) ;                 
                System.out.println("User name :- "+possibleEmail);
                System.out.println("User Password :- "+possiblePassword);

            }

        }

在 Manifest.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>

关于如何解决此异常的任何想法?

4

3 回答 3

1

你不能。只有管​​理帐户的身份验证器才能访问存储的凭据(在本例中为 Google 身份验证器)。

有关如何使用 向身份验证器请求安全令牌的信息,请参阅AccountManagergetAuthToken(),这将允许您登录帐户(但不会向您提供用户密码)。

许多服务器支持某种身份验证令牌的概念,它可用于对服务器的请求进行身份验证,而无需发送用户的实际密码。(身份验证令牌通常使用包含用户凭据的单独请求创建。)AccountManager 可以为应用程序生成身份验证令牌,因此应用程序不需要直接处理密码。

于 2012-12-24T07:01:02.597 回答
0

如果您是从 github 下载的,请确保类中的 String ACCOUNT_TYPE 与您的身份验证器的 XML 定义中的常量相同。

在 file1.java

class AuthenticatorService extends Service {
public static final String ACCOUNT_TYPE = "com.joelapenna.foursquared"; 

在文件 1.xml 中

<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="com.joelapenna.foursquared.account" ... />

删除 xml 文件中的“...”,这会导致字符串不匹配。

于 2012-12-24T07:16:24.377 回答
0
Account[] accounts = AccountManager.get(getApplicationContext())
                .getAccounts();

        for (Account account : accounts) {

            if (account.name.endsWith("gmail.com")) {

            String  email = account.name;


            }

        }
于 2012-12-24T08:04:57.407 回答