2

私はandroid.accountsapisを初めて使用し、それらを使って何かをしようとしていますが、ダミーの問題が発生しているようです...
アプリのオーセンティケーターを作成しましたが、抽象メソッドをまだ実装していません。そのアイコンがシステムの[アカウントの追加]ウィンドウに正常に表示されます。クリックすると、オーセンティケーターのメソッドaddAccountが呼び出されることがわかります。

ここで、このメソッドで簡単なことを行い、以下のコードを記述します。

    @Override
public Bundle addAccount(AccountAuthenticatorResponse response,
        String accountType, String authTokenType, String[] requiredFeatures,
        Bundle options) {

    Log.d(LOG_TAG, "RRAuthenticator add account... ");
    String accountName = "example@example.com";
    Account account = new Account(accountName, accountType);
    String password = "example_password";
    AccountManager manager = AccountManager.get(context);
    manager.addAccountExplicitly(account, password, null);

    Bundle bundle = new Bundle();
    bundle.putString(AccountManager.KEY_ACCOUNT_NAME, accountName);
    bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, accountType);
    bundle.putString(AccountManager.KEY_AUTHTOKEN, "example_authtoken");
    return bundle;
}

SampleSyncAdapterのデモを見て、そのような動きをします。ただし、アカウントを直接追加して、これらのAPIの使用を練習しています。しかし、システムが回線によってクラッシュしましたmanager.addAccountExplicitly(account, password, null); 。何が問題になっていますか?


後で追加:システムプロセスの例外。システムがクラッシュします。AccountManagerによるNullPointerExceptionスロー。このステートメントにコメントしているので、addAccountExplicitlyメソッドの問題のようです。クラッシュは発生しません。

4

2 に答える 2

1

私はそれを解決しました。

これはAndroid2.0のバグであることが判明しました。
AccountManagerにアカウントを追加する場合は、Android2.0プラットフォームでSynAdapterもアカウントに提供する必要があります。しかし、Android2.1以降では問題ありません。

これは既知の問題です。http://code.google.com/p/android/issues/detail?id =5009およびSyncAdapterのないAccountManager
参照してください。

于 2011-05-21T09:18:58.450 に答える
0
 Account account = new Account(username, AuthConstants.ACCOUNT_TYPE);
            if (am.addAccountExplicitly(account, password, null)) {
                result = new Bundle();
                ContentResolver.setSyncAutomatically(account, DB.AUTHORITY, true);
                result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
                result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
                return result;
            } 

私はこのコードを私のアプリの1つで使用しています。これは完全に機能します。ここで重要なのは、登録する必要のある認証結果バンドルを設定するAccountAuthenticatorActivityです(Android開発者の同期アダプターにはこれがあります。

また、accountAuthenticationサービスのaddAccountメソッドもここにあります

    @Override
public Bundle addAccount(AccountAuthenticatorResponse response,
    String accountType, String authTokenType, String[] requiredFeatures,
    Bundle options) {
    final Intent intent = new Intent(mContext, LoginScreen.class);
    intent.putExtra(LoginScreen.PARAM_AUTHTOKEN_TYPE,
        authTokenType);
    intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE,
        response);
    final Bundle bundle = new Bundle();
    bundle.putParcelable(AccountManager.KEY_INTENT, intent);
    return bundle;
}

アップデート

オーセンティケーター

これが私が使ったリンクです。これは良いプロジェクトです。私はそれがlast.fmアンドロイドアプリからのものだと信じています。また、私が信じているgitでソースコードを開いています。だからそれと比較してみてください。

許可

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
  <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
  <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
  <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
  <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
  <uses-permission android:name="android.permission.WRITE_SETTINGS" />
  <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
于 2011-05-19T12:30:53.480 に答える