Я наконец узнал после многих попыток!
Accountmanager.addAccount() и Accountmanager.addAccountExplicitly() - очень разные методы!
при вызове Accountmanager.addAccount() это называют один и тот же метод, что в вашем AbstractAccountAuthenticator вы можете справиться, что происходит. в других случаях, когда пользователь переходит к настройкам/учетной записи телефона и выбирает свой собственный тип учетной записи и нажимает «добавить учетную запись», этот метод вызовет. поэтому я обрабатываю тип учетной записи и многие другие вещи, а также прямой пользователь для входа/входа в систему.
public class MyAuthenticator extends AbstractAccountAuthenticator {
@Override
public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options) throws NetworkErrorException {
final Intent intent = new Intent(mContext, DirectLogin.class);
intent.putExtra(Constants.ARG_ACCOUNT_TYPE, accountType);
intent.putExtra(Constants.ARG_AUTH_TYPE, authTokenType);
intent.putExtra(Constants.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;
}
тогда в моей activiy пользователь выбрал создать учетную запись или войдите в систему. После пения в или регистрация пользователя получить маркеры от сервера и действия завершает и, наконец, я использую Accountmanager.addAccountExplicitly()
добавить учетную запись.
String accountName = "name";
String accountPassword = "password";
final Account account = new Account(accountName, "account_type");
AccountManager mAccountManager = AccountManager.get(getBaseContext());
String authToken = intent.getStringExtra(AccountManager.KEY_AUTHTOKEN);
String refreshToken = intent.getStringExtra(AccountManager.KEY_USERDATA);
String authTokenType = AccountGeneral.ACCOUNT_TYPE;
mAccountManager.addAccountExplicitly(account, accountPassword, null);
mAccountManager.setAuthToken(account, authTokenType, authToken);
mAccountManager.setUserData(account, "refreshToken", refreshToken);
Я обновил вопрос. мы также можем добавить тип учетной записи без необходимости addAccount() – Kenji