在AccountManager中禁止多个帐户

cop*_*lii 12 android accountmanager

我已经实现了我的AccountManager身份验证器和服务以及整个交易,这一切似乎都运行良好.

但是,有一个小问题:我只希望我的应用程序的单个帐户存在于帐户管理器中,但似乎无法找到限制此方法的方法.

在添加新帐户之前,我是唯一可以进行搜索并删除当前帐户(按类型)的解决方案吗?

我目前的代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我绝不会称之为优雅的解决方案,但此刻似乎是唯一有效的方法.

Jef*_*man 14

根据javadocsaddAccount(),如果在创建帐户时出现错误情况,则应返回包含KEY_ERROR_CODEKEY_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;
    }
Run Code Online (Sandbox Code Playgroud)

返回null 并不意味着失败,这意味着结果将通过响应参数传递给addAccount()方法.


Cam*_*ham 5

在Authenticator类的addAccount函数(扩展AbstractAccountAuthenticator的函数)中,首先检查是否存在帐户.如果帐户已存在,则只返回null(并且可能显示toast消息).如果没有帐户,只需像以前一样返回捆绑包.

        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;
    }
Run Code Online (Sandbox Code Playgroud)

  • 在addAccount上返回null:"如果要通过响应返回结果,则返回null".您可以拍摄Toast消息,但应该返回一个Bundle:"KEY_ERROR_CODE和KEY_ERROR_MESSAGE以指示错误".[AbstractAccountAuthenticator](http://developer.android.com/reference/android/accounts/AbstractAccountAuthenticator.html) (4认同)