Ответ 1
Я размышлял над той же проблемой, и вот "решение", которое я решил. Это не то, что я бы назвал "правильным" решением, но это лучшее, что я считаю, что вы можете управлять с помощью текущего API.
В моей реализации класса AbstractAccountAuthenticator
я переопределил функцию getAccountRemovalAllowed
следующим образом:
@Override
public Bundle getAccountRemovalAllowed(
AccountAuthenticatorResponse response, Account account)
throws NetworkErrorException {
Bundle result = super.getAccountRemovalAllowed(response, account);
if (result != null && result.containsKey(AccountManager.KEY_BOOLEAN_RESULT)
&& !result.containsKey(AccountManager.KEY_INTENT)) {
final boolean removalAllowed = result.getBoolean(AccountManager.KEY_BOOLEAN_RESULT);
if (removalAllowed) {
// Do my removal stuff here
}
}
return result;
}
Существует небольшая вероятность того, что удаление может завершиться с ошибкой ПОСЛЕ возврата из getAccountRemovalAllowed
, но это незначительно (IMHO).
Как сказал MisterSquonk, есть намерение, которое вы могли бы прослушать (ACCOUNTS_CHANGED_INTENT
), но, к сожалению, оно транслируется при изменении учетной записи, а не только при удалении учетной записи.
Я не понимаю, почему это не является частью SDK, но, возможно, мы оба пропустили что-то очевидное! На данный момент я придерживаюсь такого подхода, поскольку мне нужно удалить некоторые собственные таблицы базы данных при удалении учетной записи.
Надеюсь, это поможет.