我正在尝试编写自己的身份验证器并将其用作具有两个不同应用程序的库:A 和 B。我关注了这篇文章:http ://udinic.wordpress.com/2013/04/24/write-your-own-安卓身份验证器/ . 我安装了应用 A,然后安装了应用 B。当应用 A 调用 AccountManager.addAccount() 时,AccountAuthenticatorActivity 打开。当应用 B 调用 AccountManager.addAccount() 时,什么也没有发生。如果我卸载应用 A 并在应用 B 中重试,AccountAuthenticatorActivity 将打开。
我的目标是为这两个应用程序使用相同的 AccountAuthenticatorActivity 和 AccountAuthenticator,但它似乎一次只能在一个应用程序上工作。
这是我的 AbstractAccountAuthenticator 中的 addAccount:
@Override
public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options) throws NetworkErrorException {
final Intent intent = new Intent(mContext, AuthenticatorActivity.class);
intent.putExtra(AuthenticatorActivity.ARG_ACCOUNT_TYPE, accountType);
intent.putExtra(AuthenticatorActivity.ARG_AUTH_TYPE, authTokenType);
intent.putExtra(AuthenticatorActivity.ARG_IS_ADDING_NEW_ACCOUNT, true);
intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);
final Bundle bundle = new Bundle();
bundle.putParcelable(AccountManager.KEY_INTENT, intent);
return bundle;
}
这就是我从我的两个应用程序中调用 accountManager.addAccount() 的方式:
private void addNewAccount(String accountType, String authTokenType) {
final AccountManagerFuture<Bundle> future = mAccountManager.addAccount(accountType, authTokenType, null, null, this, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
try {
Bundle bnd = future.getResult();
} catch (Exception e) {
e.printStackTrace();
}
}
}, null);
}