4

我已经用谷歌搜索了这个问题,但我没有找到任何解决方案。

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

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

甚至,当我尝试从设置中删除该帐户时,什么也没有发生。仅当我卸载该应用程序时,该帐户才会被删除。

我应该怎么办?

4

2 回答 2

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 线程上调用它。为简洁起见,此示例未提供该机制。

于 2014-01-16T03:45:48.513 回答
2

两件事情:

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

    final AccountManager accountManager = AccountManager.get(this);
    accountManager.getAccountsByType(Constants.ACCOUNT_TYPE)[0];
    
  2. 确保如果您覆盖getAccountRemovalAllowedAuthenticator的 Bundle,您将返回布尔值为 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;
    }
    
于 2013-10-04T17:29:18.677 回答