Android身份验证:不调用回调

时间:2013-01-31 10:13:09

标签: android authentication callback

我正在使用身份验证示例在Android 4.2中实现身份验证系统。在我的应用程序中,我有一个带有Login选项的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-&gt; Run),则会在我的应用程序关闭再次安装之前调用回调。

[/编辑]

1 个答案:

答案 0 :(得分:2)

在我的AbstractAccountAuthenticator中,我忘了在addAccount方法中添加以下行:

intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);