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 オーセンティケーター)。

を使用してオーセンティケーターから安全なトークンを要求する方法については、AccountManagerを参照してくださいgetAuthToken()。これにより、アカウントにログインできるようになります (ただし、ユーザーのパスワードは提供されません)。

多くのサーバーは、ユーザーの実際のパスワードを送信せずにサーバーへの要求を認証するために使用できる認証トークンの概念をサポートしています。(認証トークンは通常、ユーザーの資格情報を含む別の要求で作成されます。) AccountManager はアプリケーションの認証トークンを生成できるため、アプリケーションはパスワードを直接処理する必要はありません。

于 2012-12-24T07:01:02.597 に答える
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 に答える
0

それを github からダウンロードした場合は、クラスの String ACCOUNT_TYPE が認証子の XML 定義の定数と同じであることを確認してください。

file1.java 内

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

file1.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 に答える