12

我已经实现了我的 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);
    }
}

我绝不称这是一个优雅的解决方案,但目前似乎是唯一有效的方法。

4

3 回答 3

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

返回null 不代表失败,而是通过response参数将结果传递给addAccount()方法。

于 2012-12-11T21:31:01.370 回答
5

在 Authenticator 类(扩展 AbstractAccountAuthenticator 的那个)的 addAccount 函数中,首先检查帐户是否存在。如果帐户已经存在,则返回 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;
    }
于 2012-03-07T22:48:54.317 回答
0

该链接说明如何重命名帐户,这可能相当于您在 developer.Android 上的 renameAccount请求。但是,它仅适用于 API 级别 21。如果有人可以为早期设备制作它,请分享!

于 2015-01-10T06:15:42.737 回答