我已经用Google搜索了这个问题,但我找不到任何解决方案。
我创建了自己的自定义帐户。当我尝试使用以下代码以编程方式删除帐户时,不会删除该帐户:
Account systemAccount = new Account(mainAccount.getDisplayName(),
getResources().getString(R.string.account_type));
AccountManager.get(Accounts.this).removeAccount(systemAccount, null, null);
甚至,当我尝试从设置中删除帐户时,没有任何反应。 只有在我卸载应用程序时才会删除该帐户。
我该怎么办?
答案 0 :(得分:4)
您没有使用Future
作为参数传递给AccountManagerCallback<Boolean>#run
方法。
您应该将回调作为第二个参数提供给:public AccountManagerFuture<Boolean> removeAccount (Account account, AccountManagerCallback<Boolean> callback, Handler handler)
myAccountManager.removeAccount(myAccount, new AccountManagerCallback<Boolean>() {
@Override
public void run(AccountManagerFuture<Boolean> future) {
// This is the line that actually starts the call to remove the account.
boolean wasAccountDeleted = future.getResult();
}
}, null);
你应该小心打电话给future.getResult()
。它不应该在主UI线程上调用。这个例子没有提供简洁的机制。
答案 1 :(得分:2)
两件事:
始终从AccountManager
获取帐户对象以进行更改。
final AccountManager accountManager = AccountManager.get(this);
accountManager.getAccountsByType(Constants.ACCOUNT_TYPE)[0];
如果您在getAccountRemovalAllowed
上覆盖Authenticator
,请使用布尔值true返回Bundle,这是默认行为。
public Bundle getAccountRemovalAllowed(
AccountAuthenticatorResponse response, Account account)
throws NetworkErrorException {
final Bundle result = new Bundle();
result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, true);
return result;
}