Удаление данных при удалении учетной записи

Я хочу очистить данные приложения, когда пользователь вручную удаляет учетную запись из раздела Accounts & sync в приложении настроек.

У меня есть собственная реализация AbstractAccountAuthenticator, но нет способа подключиться к процессу удаления учетной записи. Любые подсказки?

Ответы

Ответ 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, но, возможно, мы оба пропустили что-то очевидное! На данный момент я придерживаюсь такого подхода, поскольку мне нужно удалить некоторые собственные таблицы базы данных при удалении учетной записи.

Надеюсь, это поможет.