2016-04-01 40 views
7

neden Accountmanager.addAccountExplicitly() ile tüm parametrelerle hesap oluşturabildiğimiz için Accountmanager.addAccount() kullanıyoruz.Accountmanager.addAccount() vs Accountmanager.addAccountExplicitly()

Accountmanager.addAccount() kullandıkları zaman googled ve AbstractAccountAuthenticatoraddAccount olayını ne zaman kullandıklarını öğrendim ama ne anlamı var? neden addAccount yöntemini kullanmalıyız?

Uprated biz bu şekilde hesap oluşturabilir

:

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

cevap

7

Sonunda birçok denemeden sonra öğrendim!

Accountmanager.addAccount() ve Accountmanager.addAccountExplicitly() çok farklı yöntemlerdir!

Eğer Accountmanager.addAccount() sizin AbstractAccountAuthenticator içinde ne olacağını işleyebilir bir de aynı yöntemi var çağırdığınızda. Diğer yandan, kullanıcı telefon ayarları/hesaplarına gidip özel hesap türünüzü seçip "hesap ekle" ye basıldığında bu yöntem çağrılır. Bu yüzden hesap türü ve birçok şeyle ilgileniyorum ve kullanıcıyı giriş/şarkı sayfasına yönlendiriyorum.

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

sonra benim activiy kullanıcı bir hesap oluşturmak veya giriş. Sonrası şarkı veya kayıt kullanıcı sunucu ve eylem tamamlar gelen belirteçleri almak için seçtim ve sonunda hesabı eklemek için Accountmanager.addAccountExplicitly() kullanın.

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() bazı türünde bir hesap oluşturmak için kullanıcı sormaya kullanımı olmalıdır. Kullanıcı, hesabın gerçekten oluşturulmasını sağlamak için cihazı onaylamalı ve etkileşimde bulunmalıdır. Bu yöntem herhangi bir türde bir hesap oluşturmak için kullanılabilir.

AccountManager.addAccountExplicitely(), kullanıcı onayı/etkileşimi olmadan bir Hesap oluşturmanıza olanak sağlar, ancak kimlik doğrulayıcının sizinkiyle aynı imzanın sahip olduğu hesap türü ile sınırlıdır.

+0

Soruyu güncelledim. addAccount() 'a ihtiyaç duymadan hesap türü de ekleyebiliriz – Kenji