В чем разница опасных и неопасных разрешений на Android
Что проверяют
Знаете ли вы, что часть разрешений выдаётся при установке, а часть спрашивается в рантайме, и умеете ли работать со вторым случаем.
Как отвечать
Неопасные (обычные) разрешения система выдаёт сама при установке: они не касаются личных данных пользователя. Пример это доступ в интернет, вибрация, состояние сети. Их достаточно объявить в манифесте.
Опасные разрешения затрагивают приватность и требуют явного согласия в момент использования: контакты, точное местоположение, камера, микрофон, календарь, файлы. Начиная с Android 6 их спрашивают в рантайме, а пользователь может отозвать их в настройках в любой момент.
Что важно назвать из практики:
- проверка перед каждым использованием: разрешение могло быть отозвано между запусками, поэтому
checkSelfPermissionвызывается всегда, а не один раз при первом старте; - современный способ запроса: контракты
ActivityResultContracts.RequestPermissionиRequestMultiplePermissions, а не устаревшийonRequestPermissionsResult; - объяснение перед запросом:
shouldShowRequestPermissionRationaleподсказывает, что пользователь уже отказывал, и тогда сначала показывают экран с объяснением, зачем разрешение нужно; - двойной отказ равнозначен «больше не спрашивать»: системный диалог не появится, остаётся вести в настройки приложения;
- новые версии дробят разрешения: местоположение делится на приблизительное и точное и на доступ в фоне, доступ к файлам заменён на отдельные разрешения для фото, видео и аудио, уведомления с Android 13 тоже требуют разрешения;
- правило проектирования: у приложения должен быть рабочий сценарий без разрешения, а спрашивать его стоит в момент, когда польза очевидна, а не на первом экране.
Где спотыкаются
Запрашивают всё сразу при запуске и получают отказы.
Проверяют разрешение один раз и падают после отзыва.
Не обрабатывают вариант «отказано навсегда» и показывают диалог, который больше никогда не появится.