Android Academy · Урок

Обработка отказов и объяснение причин

Объясняйте, зачем приложению нужно разрешение

Урок 3 из 413 шагов

«Обработка отказов и объяснение причин» — бесплатный урок Android Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Android Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Android Academy содержит 4 уроков всего.

Обработка отказов

Пользователь может отклонить разрешение, причём сделать это навсегда. Хорошо проработанное приложение корректно обрабатывает все состояния: разрешение выдано, отклонено один раз или отклонено с выбором «больше не спрашивать».

Три возможных состояния

После запроса Вы можете оказаться в одном из трёх состояний:

  • Выдано: продолжайте работу с функцией
  • Отклонено (можно запросить снова): объясните причину и повторите запрос
  • Отклонено навсегда: диалог больше не появляется; направьте пользователя в настройки

Что такое пояснение

Пояснение — это краткое объяснение того, зачем приложению требуется разрешение. Android сообщает, когда его следует показать, с помощью shouldShowRequestPermissionRationale.

shouldShowRequestPermissionRationale

Этот метод возвращает true, если пользователь хотя бы один раз отклонил разрешение, но не выбрал вариант «больше не спрашивать». Это сигнал объяснить причину перед повторным запросом.

val activity = LocalContext.current as Activity
val showRationale = ActivityCompat
    .shouldShowRequestPermissionRationale(
        activity,
        Manifest.permission.CAMERA
    )

Интерпретация сигнала

Интерпретируйте это значение вместе с результатом проверки разрешения:

  • Выдано: ничего делать не нужно
  • Не выдано и shouldShowRationale == true: покажите объяснение, затем повторите запрос
  • Не выдано и shouldShowRationale == false: это может быть первый запрос или разрешение, отклонённое навсегда

Показ диалога с пояснением

Если требуется пояснение, покажите понятный и доброжелательный диалог до повторного запуска системного запроса, чтобы пользователь понимал пользу.

if (showRationale) {
    AlertDialog(
        onDismissRequest = { },
        title = { Text("Camera needed") },
        text = { Text("We use the camera to scan codes.") },
        confirmButton = {
            TextButton(onClick = {
                launcher.launch(Manifest.permission.CAMERA)
            }) { Text("Continue") }
        }
    )
}

Обнаружение постоянного отказа

Если разрешение по-прежнему не выдано, а после уже выполненного запроса shouldShowRationale имеет значение false, считайте разрешение отклонённым навсегда. Системный диалог больше не появится.

Отслеживание факта запроса

Поскольку при самом первом запросе shouldShowRationale также имеет значение false, храните признак (например, в DataStore), указывающий, что Вы уже хотя бы раз запрашивали разрешение. Так Вы сможете отличить первый запрос от постоянного отказа.

Переход к настройкам

При постоянном отказе повторно запросить разрешение нельзя. Предложите кнопку, открывающую страницу настроек приложения, чтобы пользователь мог выдать разрешение вручную.

fun openAppSettings(context: Context) {
    val intent = Intent(
        Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
        Uri.fromParts("package", context.packageName, null)
    )
    context.startActivity(intent)
}

Проектирование интерфейса при отказе

Не оставляйте при отказе пустой или сломанный экран. Покажите понятное сообщение, объясните последствия и предложите подходящее действие: повторить запрос, открыть настройки или продолжить работу с ограниченной функциональностью.

Уважайте выбор пользователя

Не надоедайте пользователю. Если он отклонил разрешение, не показывайте навязчивые запросы на каждом экране. Повторяйте запрос только после действия, которому требуется эта функция, а в остальных случаях корректно ограничивайте возможности.

Быстрая проверка

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

Повторение

Вы научились обрабатывать отказы:

  • Три состояния: выдано, отклонено, отклонено навсегда
  • shouldShowRequestPermissionRationale показывает, когда нужно отобразить объяснение
  • Отслеживайте факт запроса, чтобы обнаружить постоянный отказ
  • При постоянном отказе направляйте пользователя в настройки приложения
  • Создавайте понятный интерфейс для состояния отказа и не надоедайте пользователю

Далее: рекомендации по обеспечению конфиденциальности.

Можно начать бесплатно

Изучай Kotlin с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
36
Уроки
152

Часто задаваемые вопросы

Урок «Обработка отказов и объяснение причин» бесплатный?

Да — полный текст урока «Обработка отказов и объяснение причин» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Android Academy, подпишись на CoddyKit PRO. Курс Android Academy содержит 4 уроков всего.

Чему я научусь в уроке «Обработка отказов и объяснение причин»?

Объясняйте, зачем приложению нужно разрешение Ты практикуешь Android Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Android Academy?

Предыдущий опыт не требуется. Android Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Обработка отказов и объяснение причин»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Android Academy?

Да. Каждый урок Android Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Модель разрешений Android
  2. Запрос разрешений в Compose
  3. Обработка отказов и объяснение причин
  4. Рекомендации по конфиденциальности
← Назад к Android Academy