2016-04-01 2 views
7

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

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

форсированных

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

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

ответ

7

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

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); 
0

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

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

+0

Я обновил вопрос. мы также можем добавить тип учетной записи без необходимости addAccount() – Kenji

 Смежные вопросы

  • Нет связанных вопросов^_^