Обнаружение удаления учетной записи Android

Я разрабатываю приложение для Android с учетными записями, синхронизацией и поставщиком контента. добавление учетной записи работает, синхронизация также и некоторые данные сохраняются в контент-провайдере.

Теперь, когда пользователь удаляет учетную запись, используя настройки, синхронизация прекращается, но данные остаются в поставщике контента.

Я хотел бы удалить его, но не знаю, как отловить событие удаления учетной записи.

Есть AccountManager.addOnAccountsUpdatedListener()Я пытался добавить его в службу синхронизации, но служба синхронизации запускается только для синхронизации, а затем останавливается. поэтому всякий раз, когда учетная запись удаляется, пока нет синхронизации, она не может быть поймана.

Есть ли лучший способ обработки личных данных при удалении учетной записи?

2 ответа

Сначала вы должны добавить OnAccountsUpdateListener к своему AccountManager с помощью этой команды:

AccountManager mAccountMgr = AccountManager.get(getContext());
mAccountMgr.addOnAccountsUpdatedListener(new AccountsUpdateListener(), null, false);

В AccountsUpdateListener реализован класс OnAccountsUpdateListener:

private class AccountsUpdateListener implements OnAccountsUpdateListener {
    @Override
    public void onAccountsUpdated(Account[] accounts) {
        Account newAccount = null;
        for (final Account account : accounts) {
            if (account.type.equals(mAccountType)) {
                newAccount = account;
            }
        }

        if (newAccount == null) {
          // account removed, now you can handle your private data and remove anything you want here
        }
    }
}

onAccountsUpdated срабатывает при добавлении учетной записи или удалении учетной записи. так что вы можете проверить тип вашей учетной записи, чтобы найти указанную учетную запись в массиве учетных записей. если он не существует, он удаляется! mAccountType - это тип вашей учетной записи. например, mAccountType = "имя вашего приложения"

Вы должны использовать методgetAccountRemovalAllowedот твоегоAbstactAccountAuthenticator:

          class AccountAuthenticatorImpl(context: Context) : AbstractAccountAuthenticator(context) {
    
        override fun getAccountRemovalAllowed(
            response: AccountAuthenticatorResponse?,
            account: Account?
        ): Bundle {
            val result = super.getAccountRemovalAllowed(response, account)
            val canDelete = result.getBoolean(android.accounts.AccountManager.KEY_BOOLEAN_RESULT, false)
    
            if (canDelete) {
                // TODO: account was deleted, so react on it
                accountRepository.onAccountDeletedInSystem()
            }
    
            return result
        }
    
    
    }
Другие вопросы по тегам