Обработка разрешений, когда мы отключаем (аннулируем) их в настройках приложения

У нас есть приложение с некоторыми предоставленными разрешениями. Затем пользователь отменяет разрешения в меню «Настройки» -> «Приложение» -> «Разрешения». Я упоминаю, что приложение в это время находится в фоновом режиме.

Иногда приложение аварийно завершает работу, когда происходит описанный выше процесс. Есть ли способ справиться с этим? Можем ли мы узнать, когда разрешение будет отозвано из настроек приложения?

Официальной документации на эту тему я не нашел.

Сценарий:

  1. Откройте приложение и дайте все разрешения.
  2. Нажмите кнопку «Домой» (приложение в фоновом режиме).
  3. Вручную отозвать разрешения из настроек.
  4. Вернитесь в приложение -> оно вылетает

Спасибо.


person Domizzi    schedule 15.03.2017    source источник
comment
Почему бы вам не проверить необходимое разрешение в onResume?   -  person Devrim    schedule 15.03.2017
comment
Что такое отчет о сбое?   -  person Piyush    schedule 15.03.2017
comment
Я проверяю это на onResume. Я видел, что некоторые люди предлагали проверить это на onCreate, но это не работает.   -  person Domizzi    schedule 15.03.2017
comment
› Кроме того, если разрешение будет отозвано пользователем, ваш процесс будет прекращен, что зависело от этого критического разрешения. Применимо ли это к обоим (Android и iOS)?   -  person Neil Marjun Martinez    schedule 08.11.2018


Ответы (2)


Вы должны проверить, предоставлено ли разрешение или нет, и обработать его в соответствии с вашими требованиями:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case //location_permission_code:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

            } else {

            }
        break;
    }
}
person Tejas Shukla    schedule 03.08.2018

person    schedule
comment
Спасибо. Я работаю с активностью, поэтому я использую onResume(). - person Domizzi; 15.03.2017
comment
Вы должны следить за такими наблюдателями, как: getApplicationContext(). - person miroslavign; 04.05.2018