Intereting Posts
Как безопасно закрыть курсор и базу данных? В чем разница между датчиками «гравитация» и «ускорение» в Android? RxJava: Как сделать однократное повторное использование? Этот класс обработчика должен быть статическим или может возникнуть утечка: AsyncQueryHandler Класс не является абстрактным и не отменяет абстрактный метод onClick (View) в OnClickListener Как град выбирает определенные URL-адреса для поиска репозитория? Как указать его в правильном направлении, чтобы я мог импортировать этот JAR? Spinner плавает вниз при горизонтальном выравнивании Внедрить непрерывные метки даты на оси x mpandroidchart Задача Google по градиенту Google Appengine Android ListView обновить Получение координаты экрана элемента меню панели действий для создания экрана ввода Почему мое векторное масштабируемое масштабирование не ожидается? Используйте смартфонную камеру из веб-приложения для сканирования QR-кода Код состояния Bluetooth Bluetooth Bluetooth 128 BLE-соединение Firebase Cloud Messaging android project не отправляет push-уведомления

Как удалить учетную запись в AccountManager в Android

Я пытаюсь удалить пользовательскую учетную запись в AccountManager.

Это мой код:

final Handler handler = new Handler (); AccountManagerCallback<Boolean> callback = new AccountManagerCallback<Boolean>() { @Override public void run(AccountManagerFuture<Boolean> arg0) { String test = "test"; } }; AccountManagerFuture<Boolean> bool = am.removeAccount(account, callback, handler); 

Разрешения, которые я использую:

 <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"></uses-permission> <uses-permission android:name="android.permission.GET_ACCOUNTS"></uses-permission> <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"></uses-permission> <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"></uses-permission> 

Учетная запись никогда не удаляется, а callback никогда не звонит, любая идея? Нет следов в журналах

Попробуйте это, он будет работать

  // Global Variables public static final String AUTHORITY = "com.example.package"; public static final String ACCOUNT_TYPE = "com.example.package"; public static final String ACCOUNT = "my_custom_account_name"; // Account Manager definition AccountManager accountManager = (AccountManager) this.getSystemService(ACCOUNT_SERVICE); // loop through all accounts to remove them Account[] accounts = accountManager.getAccounts(); for (int index = 0; index < accounts.length; index++) { if (accounts[index].type.intern() == AUTHORITY) accountManager.removeAccount(accounts[index], null, null); } 

требует

 <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" /> 

Вы должны переопределить следующий метод в классе Authenticator из AbstractAccountAuthenticator .

 public Bundle getAccountRemovalAllowed(AccountAuthenticatorResponse response, Account account) { Bundle result = new Bundle(); boolean allowed = true; // or whatever logic you want here result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, allowed); return result; } 

Вы должны вызвать метод ниже, чем метод removeAccount, и система позволит вам удалить учетную запись в диспетчере учетных записей. ClearPassword invalidateAuthToken

Основываясь на описании метода removeAccount:

«У аутентификатора могут быть свои собственные политики, предотвращающие удаление учетной записи, и в этом случае учетная запись не будет удалена».

Повеселись.

Этот Кодекс работает как прелесть для меня.

Вам понадобится WRITE_SYNC_SETTINGS, также необходимо добавить android.permission.MANAGE_ACCOUNTS работает для меня с одинаковым кодом кода. разрешение. Поэтому, если вы правильно используете AccountManager и Account, вам удастся удалить аккаунт успешно.

У меня возникли проблемы с использованием менеджера аккаунта в Android Simulator, поэтому попробуйте протестировать на реальном устройстве …

 AccountManager accMgr = AccountManager.get(this); final Account account = new Account(username, accountType); removeCaxtonAccount(accMgr, account); public void removeCaxtonAccount(AccountManager accMgr, Account account){ accMgr.removeAccount(account, null,null); } 

Вот мое решение. Предыдущие решения, которые я нашел, явно не ждут завершения удаления учетных записей, чтобы они случайным образом выходили из строя.

  final AccountManager accountManager = AccountManager.get(getContext()); final String accountType = AuthenticatorService.ACCOUNT_TYPE; final Account[] availableAccounts = accountManager.getAccountsByType(accountType); for (final Account availableAccount : availableAccounts) { final AccountManagerFuture<Boolean> booleanAccountManagerFuture = accountManager.removeAccount(availableAccount, null, null); assertTrue("Impossible to delete existing account for this application", booleanAccountManagerFuture.getResult(1, TimeUnit.SECONDS)); } 

Примечание. Вам все еще нужны упомянутые выше разрешения.