2016-04-01 14 views
7

warum wir Accountmanager.addAccount() verwenden, wenn wir Konto mit allen Parametern mit Accountmanager.addAccountExplicitly() erstellen können.Accountmanager.addAccount() vs Accountmanager.addAccountExplicitely()

Ich googelte und finde heraus, wenn wir Accountmanager.addAccount() es trigles AbstractAccountAuthenticatoraddAccount Ereignis verwenden, aber was ist der Punkt? Warum sollten wir die addAccount-Methode verwenden?

Uprated

wir Konto auf diese Weise erstellen:

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

Antwort

7

Ich endlich herausfinden, nach vielen Versuchen!

Accountmanager.addAccount() und Accountmanager.addAccountExplicitly() sind sehr unterschiedliche Methoden!

, wenn Sie anrufen Accountmanager.addAccount() nennen es ist eine gleiche Methode, die in Ihrem AbstractAccountAuthenticator Sie behandeln können, was passiert. Wenn der Benutzer andererseits zu den Telefoneinstellungen/dem Konto wechselt und seinen benutzerdefinierten Kontotyp auswählt und auf "Konto hinzufügen" klickt, wird diese Methode aufgerufen. also behandle ich account-type und viele sachen und leite den benutzer zur login-/singup-seite.

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

dann in meinem activiy Benutzer wählte ein Konto oder melden Sie sich an erstellen. Nach Sing-in oder Anmelde-Benutzer-Token vom Server erhalten und vervollständigt Aktion und ich schließlich Accountmanager.addAccountExplicitly() Konto hinzuzufügen.

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() müssen Gebrauch sein, den Benutzer zu fragen, ein Konto eines bestimmten Typs zu erstellen. Der Benutzer muss das Gerät genehmigen und mit ihm interagieren, damit das Konto tatsächlich erstellt wird. Diese Methode kann verwendet werden, um ein Konto eines beliebigen Typs zu erstellen.

AccountManager.addAccountExplicitely() können Sie ein Konto ohne Benutzer Genehmigung/Interaktion erstellen, aber es ist auf Kontotyp beschränkt, für die der Authenticator die gleiche Signatur wie Sie haben.

+0

Ich aktualisierte die Frage. Wir können auch Kontotypen hinzufügen, ohne addAccount() – Kenji