我已经实现了我的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);
}
}
我绝不会称之为优雅的解决方案,但此刻似乎是唯一可行的解决方案。
答案 0 :(得分:13)
根据javadocs for 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()
方法。
答案 1 :(得分: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;
}
答案 2 :(得分:0)
该链接说明了如何重命名帐户,这可能等同于您的请求renameAccount on developer.Android。但是它只能从API级别21获得。如果某人有办法为早期设备制作它,请分享!