我正在使用身份验证示例在 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->Run),则会在我的应用程序关闭以再次安装之前调用回调。
[/编辑]