Обнаружение удаления учетной записи 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
}
}