Камера перестала открываться после того, как пользователь зашёл в системные настройки
Приложение сканирует QR-коды. При первом запуске оно запрашивает разрешение на камеру, а результат сохраняет у себя:
if (prefs.getBoolean("camera_granted", false)) {
openScanner()
} else {
requestCameraPermission() // при успехе пишем camera_granted = true
}
Часть пользователей жалуется: сканер открывается, но показывает чёрный экран и ничего не сканирует.
В чём причина?
- Пользователь мог отозвать разрешение в системных настройках, а приложение верит своему сохранённому флагу вместо текущего статуса у системы
- Флаг разрешения нельзя хранить в обычных настройках приложения — для этого нужно защищённое хранилище
- Разрешение выдаётся только на текущую сессию и сбрасывается при каждом перезапуске приложения
- Все нужные разрешения надо запрашивать одним пакетом на старте приложения, иначе система выдаёт доступ частично и камера работает нестабильно
