Accountmanager.addAccount() vs Accountmanager.addAccountExplicitly()

почему мы используем Accountmanager.addAccount(), когда мы можем создать учетную запись со всеми параметрами с помощью Accountmanager.addAccountExplicitly().

Я googled и узнаю, когда мы используем Accountmanager.addAccount(), это вызывает событие AbstractAccountAuthenticator addAccount, но в чем смысл? почему мы должны использовать метод addAccount?

форсированного

мы можем создать учетную запись таким образом:

 Account account = new Account(accountname, accountType);
 mAccountManager.addAccountExplicitly(account, accountPassword, null);

Ответ 1

Наконец-то узнаю после многих попыток!

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;
    }

то в моем активном пользователе вы решили создать учетную запись или войти в систему. После того, как пользователь или пользователь подписываются, маркеры с сервера и действия завершаются, и, наконец, я использую 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);

Ответ 2

Accountmanager.addAccount() должен использоваться, чтобы попросить пользователя создать учетную запись какого-либо типа. Пользователь должен одобрить и взаимодействовать с устройством, чтобы действительно создать учетную запись. Этот метод может использоваться для создания учетной записи любого типа.

AccountManager.addAccountExplicitely() позволяет вам создать учетную запись без одобрения/взаимодействия пользователя, но она ограничена типом учетной записи, для которой аутентификатор имеет ту же подпись, что и ваша.