2017-01-02 4 views
0

Lorsque mon application démarre, je voudrais demander à mes utilisateurs de créer un Account ou de choisir parmi ceux qui existent déjà. J'ai mis en œuvre un Authenticator (étendu AccountAuthenticatorActivity, AbstractAccountAuthenticator, a fait un Service) Il semble fonctionner, je peux créer de nouveaux comptes à partir de paramètres/comptes. Lorsque je démarre un AccountPicker, j'obtiens une liste des comptes déjà créés. Lorsque je clique sur Add acccount, il apparaît ma création AccountActivity. Mais quand j'ai fini avec la création de compte, finissant cette activité, et revenant au AccountPicker je ne vois pas une nouvelle option de la Account nouvellement créée. Bien que si je redémarre l'application, le Account récemment créé est dans la liste.Compte AndroidPicker 'Ajouter un compte' n'actualise pas les options

Comment je commence les AccountPicker:

Intent intent = accountManager.newChooseAccountIntent(null, null, new String[]{"test_namespace"}, null, null, null, null); 
startActivityForResult(intent, TEST_CODE); 

Mes questions:

  • Est-il censé fonctionner comme ça? Puis-je recharger le contenu du AccountPicker après avoir créé un nouveau Account?
  • Puis-je simplement retourner un Intent avec le Account nouvellement créé quand je retourner de ma Account création Activity?

Répondre

0

Dans mon activité authentificateur, après que l'utilisateur authentifie sur le serveur je vérifie les comptes existants et ajouter explicitement le compte si elle est pas là:

boolean accountRegistered = false; 
    Account account = new Account(username, AccountAuthenticator.ACCOUNT_TYPE_MYAPP); 
    AccountManager acctMgr = AccountManager.get(this); 
    Account[] accounts = acctMgr.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE_MYAPP); 
    for (Account acct : accounts) { 
     if (acct.equals(account)) { 
      accountRegistered = true; 
      break; 
     } 
    } 

    if (accountRegistered) { 
     acctMgr.setPassword(account, password); 
    } else { 
     acctMgr.addAccountExplicitly(account, password, null); 
    } 

Après que je fais cela, je vois le compte le sélecteur de compte.

Je ne peux pas garantir que c'est 100% correct; avec les classes d'authentification non documentées, nous volons tous à l'aveuglette.