12

私は自分の AccountManager オーセンティケーターとサービス、そして取引全体を実装しましたが、すべてうまくいっているようです。

ただし、小さな問題が 1 つあります。アカウント マネージャーに自分のアプリ用のアカウントを 1 つだけ存在させたいのですが、これを制限する方法を見つけることができないようです。

新しいアカウントを追加する前に、現在のアカウントを検索して削除する唯一の解決策はありますか?

私の現在のコード:

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

私は決してこれをエレガントなソリューションとは呼びませんが、現時点では機能する唯一のもののようです。

4

3 に答える 3

14

javadocsにaddAccount()KEY_ERROR_CODEよると、アカウントの作成時にエラー状態が発生した場合は、とKEY_ERROR_MESSAGEパラメータを含むバンドルを返す必要があります。

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

戻ることは失敗を意味するのでnull はなくaddAccount()、結果が応答パラメーターを介してメソッドに伝達されることを意味します。

于 2012-12-11T21:31:01.370 に答える
5

In the addAccount function of your Authenticator class (the one which extends AbstractAccountAuthenticator), first check if an account exists. If an account already exists, just return null (And maybe show a toast message). If there are no accounts, just return the bundle like you were doing before.

        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;
    }
于 2012-03-07T22:48:54.317 に答える