Как разрешения влияют на работу разработчика и пользователя
Что проверяют
Понимаете ли вы разрешения как часть продукта, а не только как вызов API: когда запрашивать, что делать при отказе и как правила менялись от версии к версии Android. Следом обычно спрашивают, как обработать повторный отказ и можно ли обойтись без разрешения вовсе.
Как отвечать
Для разработчика:
- уровни защиты: normal выдаются при установке (
INTERNET), dangerous запрашиваются в рантайме начиная с Android 6, особые (SYSTEM_ALERT_WINDOW,SCHEDULE_EXACT_ALARM) пользователь включает в настройках; - API:
registerForActivityResult(ActivityResultContracts.RequestPermission()), связкаrequestPermissionsиonRequestPermissionsResultустарела. Перед запросом проверяютContextCompat.checkSelfPermission, аshouldShowRequestPermissionRationaleподсказывает, пора ли объяснить, зачем нужен доступ; - версии: фоновая геолокация отдельным разрешением с Android 10, приблизительная геолокация с 12,
POST_NOTIFICATIONSи раздельныеREAD_MEDIA_IMAGES/READ_MEDIA_VIDEOс 13, частичный доступ к фото с 14. Код ветвится поBuild.VERSION.SDK_INT; - модерация: для чувствительных разрешений вроде SMS или доступа ко всем файлам Google Play требует декларацию и обоснование.
Для пользователя разрешения это вопрос доверия. Система даёт разовые разрешения «только в этот раз», сбрасывает их у давно не открытых приложений, а после двух отказов перестаёт показывать диалог. Поэтому запрос делают в контексте действия: камера по нажатию «Сканировать», а не пачкой на старте.
Сильный ход: сказать, где разрешение не нужно. Photo Picker отдаёт выбранные фото без READ_MEDIA_IMAGES, а Storage Access Framework открывает файлы без доступа к хранилищу.
Где спотыкаются
Запрашивают всё при первом запуске. Пользователь отказывает, а после второго отказа диалог уже не вернуть, остаётся только вести в настройки.
Считают, что выданное разрешение выдано навсегда. Его отзывают вручную и сбрасывает система, поэтому проверять нужно перед каждым использованием.
Не делают сценарий на случай отказа. Запрет на геолокацию не должен ломать экран: дайте ввести город вручную.