2016-04-01 31 views
7

perché viene utilizzato Accountmanager.addAccount() quando è possibile creare un account con tutti i parametri con Accountmanager.addAccountExplicitly().Accountmanager.addAccount() vs Accountmanager.addAccountExplicitly()

Ho cercato su Google e ho scoperto che quando usiamo Accountmanager.addAccount() si attiva l'evento AbstractAccountAuthenticatoraddAccount ma qual è il punto? perché dovremmo usare il metodo addAccount?

MAGGIORATO

possiamo creare conto in questo modo:

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

risposta

7

Finalmente lo trovo dopo tanti tentativi!

Accountmanager.addAccount() e Accountmanager.addAccountExplicitly() sono metodi molto diversi!

quando si chiama Accountmanager.addAccount() è chiamare un stesso metodo che nella vostra AbstractAccountAuthenticator si può gestire ciò che accade. in altra mano quando l'utente accede alle impostazioni del telefono/account e seleziona il tipo di account personalizzato e premi "aggiungi un account" questo metodo chiamerà. quindi gestisco il tipo di account e molte cose e indirizzo l'utente alla pagina di login/singup.

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

poi nel mio utente activiy ha scelto di creare un account o effettuare il login. Dopo cantare-in oppure registrati utente ottenere gettoni dal server e l'azione completa e, infine, io uso Accountmanager.addAccountExplicitly() aggiungere account.

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() deve essere utilizzato per chiedere all'utente di creare un account di un certo tipo. L'utente deve approvare e interagire con il dispositivo in modo che l'account venga effettivamente creato. Questo metodo può essere utilizzato per creare un account di qualsiasi tipo.

AccountManager.addAccountExplicitely() consente di creare un account senza approvazione/interazione utente, ma è limitato al tipo di account per il quale l'autenticatore ha la stessa firma del proprio.

+0

Ho aggiornato la domanda. possiamo anche aggiungere il tipo di account senza bisogno di addAccount() – Kenji