无法删除我自己的自定义帐户

时间:2013-03-12 10:07:33

标签: android accountmanager

我已经用Google搜索了这个问题,但我找不到任何解决方案。

我创建了自己的自定义帐户。当我尝试使用以下代码以编程方式删除帐户时,不会删除该帐户:

Account systemAccount = new Account(mainAccount.getDisplayName(), 
                                    getResources().getString(R.string.account_type));
AccountManager.get(Accounts.this).removeAccount(systemAccount, null, null);

甚至,当我尝试从设置中删除帐户时,没有任何反应。 只有在我卸载应用程序时才会删除该帐户。

我该怎么办?

2 个答案:

答案 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)

两件事:

  1. 始终从AccountManager获取帐户对象以进行更改。

    final AccountManager accountManager = AccountManager.get(this);
    accountManager.getAccountsByType(Constants.ACCOUNT_TYPE)[0];
    
  2. 如果您在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;
    }