2016-04-01 6 views
7

dlaczego używamy Accountmanager.addAccount(), kiedy możemy utworzyć konto z wszystkimi parametrami z Accountmanager.addAccountExplicitly().Accountmanager.addAccount() kontra Accountmanager.addAccountExplicitly()

Przeszukałem go i dowiaduję się, kiedy używamy Accountmanager.addAccount(). Wyzwala ono zdarzenie AbstractAccountAuthenticatoraddAccount, ale jaki jest sens? dlaczego powinniśmy używać metody addAccount?

uprated

możemy stworzyć konto w ten sposób:

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

Odpowiedz

7

W końcu dowiaduję się po wielu próbach!

Accountmanager.addAccount() i Accountmanager.addAccountExplicitly() to bardzo różne metody!

kiedy zadzwonić Accountmanager.addAccount() to wywołać tę samą metodę, która w swojej AbstractAccountAuthenticator można obsługiwać co się dzieje. z drugiej strony, gdy użytkownik przechodzi do ustawień telefonu/konta i wybiera swój niestandardowy typ konta i naciska przycisk "dodaj konto", ta metoda wywoła. więc zajmuję się typem konta i wieloma rzeczami oraz kieruję użytkownika na stronę logowania/sing.

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

następnie w moim activiy użytkownik wybrał, aby utworzyć konto lub się zalogować. Po sing-albo rejestrować się użytkownik dostać żetony z serwerem i uzupełnia działania i wreszcie mogę używać Accountmanager.addAccountExplicitly() dodać konto.

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() musi być użyty aby poprosić użytkownika, aby utworzyć konto z jakiegoś typu. Użytkownik musi zatwierdzić urządzenie i wejść z nim w interakcję, aby konto rzeczywiście zostało utworzone. Ta metoda może być użyta do utworzenia konta dowolnego typu.

AccountManager.addAccountExplicitely() umożliwia utworzenie konta bez zgody użytkownika/interakcji, ale ogranicza się do typu konta, w którym wystawca uwierzytelnienia ma taki sam podpis jak twój.

+0

Zaktualizowałem pytanie. możemy również dodać typ konta bez potrzeby addAccount() – Kenji