2016-03-26 17 views
0

Bugün benim uygulamamın klasik bir giriş ekranı (kullanıcı adı ve şifre) var, bu sınıf ortak bir Etkinliği genişletiyor. Ve ilk etkinliğim Giriş yapmaktır (zaten kullanıcı oturum açmışsa, eve yönlendirir).Android - AccountManager ve Giriş Klasik

Benim android bildirim:

<!-- Start Activity --> 
    <activity 
     android:name=".activity.LoginActivity" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.NoActionBar" 
     android:windowSoftInputMode="adjustPan"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

Ve şimdi dokümantasyon ve uygulanan, Android'in Hesap Yöneticisi dağıtmak okumaya çalışıyorum. Özellik tamam. Android hesap ayarlarına girerseniz, Uygulamaya giriş yapmanız mümkün ve bir hesap oluşturdu. Ama sorum şu: Her iki yolu da nasıl tutacağım.

Kullanıcı, uygulamayı açtığında, giriş yapar ve otomatik olarak AccountManager'da bir hesap oluşturur ve hesabın içindeki uygulamalarda da ayarlar kaydedilir. Sunucuda Kullanıcı doğrulama ve parola isteğinde bulunduktan sonra (voleybol kullanarak), hangi adımı başarmam gerektiğini nasıl öğrenmeliyim? Verileri AccountManager'a iade etmek veya bir hesap eklemek mi istiyorsunuz? Hesap Ayarları

private void finishLogin(final String email, final String authToken) { 
     Account account = new Account(email, AccountGeneral.ACCOUNT_TYPE); 
     boolean success = mAccountManager.addAccountExplicitly(account, "", null); 
     if (success) { 
      Log.d(TAG, "Account created"); 
      mAccountManager.setAuthToken(account, mAuthTokenType, authToken); 
     } else { 
      Log.d(TAG, "Account creation failed. Look at previous logs to investigate"); 
     } 
} 

Ve giriş:

Girişi klasik, sunucu doğrulama sonra "addAccountExplicitly" kullanarak hesabı eklemek

Bundle data = new Bundle(); 
     data.putString(AccountManager.KEY_ACCOUNT_NAME, email); 
     data.putString(AccountManager.KEY_ACCOUNT_TYPE, accountType); 
     data.putString(AccountManager.KEY_AUTHTOKEN, authToken); 
     data.putString(PARAM_USER_PASS, password); 
     final Intent intent = new Intent(); 
     intent.putExtras(data); 

     final Account account = new Account(email, accountType); 

     if (getIntent().getBooleanExtra(ARG_IS_ADDING_NEW_ACCOUNT, false)) { 
      Log.d(TAG, " finishLogin > addAccountExplicitly"); 
      // Creating the account on the device and setting the auth token we got 
      // (Not setting the auth token will cause another call to the server to authenticate the user) 
      mAccountManager.addAccountExplicitly(account, password, null); 
      mAccountManager.setAuthToken(account, mAuthTokenType, authToken); 
     } else { 
      Log.d(TAG, " finishLogin > setPassword"); 
      mAccountManager.setPassword(account, password); 
     } 

     setAccountAuthenticatorResult(intent.getExtras()); 
     setResult(RESULT_OK, intent); 
     finish(); 

cevap

2

değil mi iki yönde tutmak için iki aktiviteye sahip olmanız ve iki senaryo ele almanız gerekir. Sadece tüm giriş işlemlerini entegre ederek, hesap verilerini ayarlayarak ve hesap yöneticisi paketinizde açık bir şekilde hesap ekleyerek. (Ulaşılabilecek olan Ayarlar -> Hesap ekle).

Daha sonra uygulamanızda AccountManager sınıfından farklı seçenekler var.

getAccountsByType() numaralı telefonu arayarak bir hesabın olup olmadığını kontrol edebilirsiniz.

AddAccount() numaralı telefonu arayarak uygulamanıza hesap ekleyebilirsiniz. Ayarlar'dan eriştiğiniz aynı etkinliği otomatik olarak gösterir. Ayrıca seçilen hesap adını ve authToken'i döndüren bir geri çağırma vardır.

Ayrıca newChooseAccountIntent() numaralı telefonu arayabilirsiniz. Çok iyi bir seçenektir, çünkü eğer bir hesap yoksa, bu yöntem otomatik olarak giriş etkinliğini gösterir ve önceden eklenmiş hesaplar varsa bunları bir liste olarak gösterir ve kullanıcı bir hesap seçebilir.