4

例として認証サンプルを使用して、Android4.2に認証システムを実装しています。私のアプリケーションには、ログインオプション付きのMenuActivityがあります。そのオプションがクリックされ、ユーザーがまだログインしていない場合、認証システムが起動し、AuthenticationActivityが表示されます。

ログインが終了したら、MenuActivityでコードを実行して、ユーザーがログインしたことを認識します。これを行うためのコールバックを作成しましたが、呼び出されません。ログインは正常に機能します。アプリを閉じて再起動すると、ユーザーがログインしていることが検出されます。

私のメニューアクティビティにはこれがあります:

public void login() {
    if(mAccount != null)
        Toast.makeText(MenuActivity.this, getString(R.string.account_exists), Toast.LENGTH_LONG).show();
    else{
        mAccountManager.addAccount(ACCOUNT_TYPE, AUTHTOKEN_TYPE, null, null, this, completeCallbackLogin, null);
    }
}

// Callback called when the login ends.
private AccountManagerCallback<Bundle> completeCallbackLogin = new AccountManagerCallback<Bundle>() {
    public void run(AccountManagerFuture<Bundle> arg0) {
        Log.d("MenuActivity", "CALLBACK");
        // When the login ends we save the account in the global variables 
        refreshAccount();

        Toast.makeText(MenuActivity.this, getString(R.string.login_ok), Toast.LENGTH_LONG).show();
    }
};

私のAuthenticatorActivity(LoginActivityと呼ばれる)では、次のことを行います。

Account account = new Account(mUsername, ACCOUNT_TYPE);
try{
    mAccountManager.addAccountExplicitly(account, mPassword, newBundle());
}catch(Exception e){
    e.printStackTrace();
    return;
}

final Intent intent = new Intent();
intent.putExtra(AccountManager.KEY_ACCOUNT_NAME, mUsername);
intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE, ACCOUNT_TYPE);
intent.putExtra(AccountManager.KEY_PASSWORD, mPassword);
intent.putExtra(AccountManager.KEY_AUTHTOKEN, mAuthToken);
intent.putExtra(AccountManager.KEY_BOOLEAN_RESULT, true);
LoginActivity.this.setAccountAuthenticatorResult(intent.getExtras());
setResult(RESULT_OK, intent);               
LoginActivity.this.finish();

私が言ったように、私のコールバックは決して呼び出されません。何故ですか?

[編集]

アプリケーションを再度実行すると(Eclipse-> Run)、アプリケーションが閉じて再度インストールされる直前にコールバックが呼び出されることに気づきました。

[/編集]

4

1 に答える 1

2

私の AbstractAccountAuthenticator では、addAccount メソッドに次の行を追加するのを忘れていました。

intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);
于 2013-01-31T12:15:18.307 に答える