12 Stimmen

Mehrere Konten in AccountManager nicht zulassen

Ich habe meinen AccountManager-Authentifikator, den Dienst und die ganze Sache implementiert, und es scheint alles gut zu funktionieren.

Es gibt jedoch ein kleines Problem: Ich möchte, dass nur ein einziges Konto für meine Anwendung in der Kontoverwaltung existiert, finde aber keine Möglichkeit, dies zu begrenzen.

Ist meine einzige Lösung, eine Suche durchzuführen und die aktuellen Konten (nach Typ) zu löschen, bevor ich das neue Konto hinzufüge?

Mein aktueller Code:

private void removeAccounts()
{
    Account [] accounts = mAcctMgr.getAccountsByType (mAccountType);

    if (accounts.length == 0) return;

    final Handler handler = new Handler (); 

    AccountManagerCallback<Boolean> callback = new AccountManagerCallback<Boolean>()
    {
        @Override
        public void run(AccountManagerFuture<Boolean> arg0)
        {
           // nada
        }
    };

    for (Account a : accounts) {
        mAcctMgr.removeAccount (a, callback, handler);
    }
}

Ich halte das keineswegs für eine elegante Lösung, aber im Moment scheint es die einzige zu sein, die funktioniert.

14voto

Jeffrey Blattman Punkte 21673

Gemäß der Javadocs für addAccount() Wenn bei der Erstellung des Kontos eine Fehlerbedingung auftritt, sollten Sie ein Bundle zurückgeben, das die KEY_ERROR_CODE y KEY_ERROR_MESSAGE Parameter,

    if (accountExists) {
        final Bundle result = new Bundle();
        result.putInt(AccountManager.KEY_ERROR_CODE, ERROR_CODE_ONE_ACCOUNT_ALLOWED);
        result.putString(AccountManager.KEY_ERROR_MESSAGE, context.getString(R.string.one_account_allowed));

        handler.post(new Runnable() {

            @Override
            public void run() {
                RepeatSafeToast.show(context, R.string.one_account_allowed);
            }
        });
        return result;
    }

Rücksendung null nicht Misserfolg bedeutet, dass das Ergebnis über den Antwortparameter an das System übermittelt wird. addAccount() Methode.

5voto

Cameron Ketcham Punkte 7866

In der Funktion addAccount Ihrer Authenticator-Klasse (diejenige, die AbstractAccountAuthenticator erweitert), prüfen Sie zunächst, ob ein Konto existiert. Wenn bereits ein Konto existiert, geben Sie einfach null zurück (und zeigen vielleicht eine Toast-Nachricht an). Wenn es keine Konten gibt, geben Sie einfach das Bündel zurück, wie Sie es zuvor getan haben.

        if(AccountHelper.accountExists(mContext)) {
        mHandler.post(new Runnable() {

            @Override
            public void run() {
                Toast.makeText(mContext, "Only one account allowed", Toast.LENGTH_SHORT).show();
            }
        });
        return null;
    }

0voto

Syl OR Punkte 117

Unter diesem Link steht, wie man ein Konto umbenennt, was Ihrer Anfrage entsprechen könnte renameAccount auf developer.Android . Sie ist jedoch erst ab API-Ebene 21 verfügbar. Wenn jemand einen Weg findet, es für frühere Geräte zu machen, bitte teilen!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X