Разрешения, связанные с местоположением, микрофоном и камерой, предоставляют вашему приложению доступ к особо конфиденциальной информации о пользователях. Платформа включает в себя несколько механизмов, описанных на этой странице, которые помогают пользователям быть в курсе событий и контролировать, какие приложения могут получать доступ к местоположению, микрофону и камере.
Эти системные функции, обеспечивающие конфиденциальность, не должны влиять на то, как ваше приложение обрабатывает разрешения, связанные с местоположением, микрофоном и камерой, если вы следуете лучшим практикам обеспечения конфиденциальности .
В частности, убедитесь, что в вашем приложении выполнены следующие действия:
- Подождите, пока пользователь не предоставит разрешение
CAMERA
вашему приложению для доступа к камере устройства. - Подождите, пока пользователь не предоставит разрешение
RECORD_AUDIO
вашему приложению, чтобы получить доступ к микрофону устройства. - Подождите, пока пользователь взаимодействует с функцией вашего приложения, требующей определения местоположения, прежде чем запрашивать разрешение
ACCESS_COARSE_LOCATION
или разрешениеACCESS_FINE_LOCATION
, как описано в руководстве по запросу разрешений на определение местоположения . - Подождите, пока пользователь не предоставит вашему приложению разрешение
ACCESS_COARSE_LOCATION
или разрешениеACCESS_FINE_LOCATION
, прежде чем запрашивать разрешениеACCESS_BACKGROUND_LOCATION
.
Панель управления конфиденциальностью
На поддерживаемых устройствах под управлением Android 12 и выше в системных настройках отображается экран «Панель конфиденциальности». На этом экране пользователи могут получить доступ к отдельным экранам, показывающим, когда приложения получают доступ к данным о местоположении, камере и микрофоне. На каждом экране отображается временная шкала доступа различных приложений к определённому типу данных. На рисунке 1 показана временная шкала доступа к данным о местоположении.
Показать обоснование доступа к данным
Ваше приложение может предоставить пользователям обоснование, помогающее им понять, почему оно получает доступ к данным о местоположении, камере или микрофоне. Это обоснование может отображаться на новом экране панели конфиденциальности, на экране разрешений вашего приложения или на обоих экранах.
Чтобы объяснить, почему ваше приложение получает доступ к информации о местоположении, камере и микрофоне, выполните следующие действия:
Добавьте действие, которое при запуске обосновывает, почему ваше приложение выполняет тот или иной тип доступа к данным. В этом действии установите для атрибута
android:permission
значениеSTART_VIEW_PERMISSION_USAGE
.Если ваше приложение предназначено для Android 12 или выше, необходимо явно указать значение атрибута
android:exported
.Добавьте следующий фильтр намерений к недавно добавленному действию:
<!-- android:exported required if you target Android 12. --> <activity android:name=".DataAccessRationaleActivity" android:permission="android.permission.START_VIEW_PERMISSION_USAGE" android:exported="true"> <!-- VIEW_PERMISSION_USAGE shows a selectable information icon on your app permission's page in system settings. VIEW_PERMISSION_USAGE_FOR_PERIOD shows a selectable information icon on the Privacy Dashboard screen. --> <intent-filter> <action android:name="android.intent.action.VIEW_PERMISSION_USAGE" /> <action android:name="android.intent.action.VIEW_PERMISSION_USAGE_FOR_PERIOD" /> <category android:name="android.intent.category.DEFAULT" /> ... </intent-filter> </activity>
Определите, что должно отображаться в вашем обосновании доступа к данным. Например, вы можете показать веб-сайт вашего приложения или статью справочного центра. Чтобы предоставить более подробное описание типов данных, к которым обращается ваше приложение, а также времени доступа, обработайте дополнительные данные, которые система включает при вызове намерения использования разрешения:
- Если система вызывает
ACTION_VIEW_PERMISSION_USAGE
, ваше приложение может получить значение дляEXTRA_PERMISSION_GROUP_NAME
. - Если система вызывает
ACTION_VIEW_PERMISSION_USAGE_FOR_PERIOD
, ваше приложение может получить значения дляEXTRA_PERMISSION_GROUP_NAME
,EXTRA_ATTRIBUTION_TAGS
,EXTRA_START_TIME
иEXTRA_END_TIME
.
- Если система вызывает
В зависимости от того, какие фильтры намерений вы добавляете, пользователи видят значок информации рядом с названием вашего приложения на определенных экранах:
- Если вы добавите фильтр намерений, содержащий действие
VIEW_PERMISSION_USAGE
, пользователи увидят соответствующий значок на странице разрешений вашего приложения в системных настройках. Вы можете применить это действие ко всем разрешениям времени выполнения. - Если вы добавите фильтр намерений, содержащий действие
VIEW_PERMISSION_USAGE_FOR_PERIOD
, пользователи будут видеть значок рядом с названием вашего приложения всякий раз, когда ваше приложение появляется на экране панели конфиденциальности.
Когда пользователь выбирает этот значок, запускается логическая операция вашего приложения.
Индикаторы
На устройствах под управлением Android 12 и выше, когда приложение обращается к микрофону или камере, в строке состояния появляется значок. Если приложение находится в режиме погружения , значок отображается в правом верхнем углу экрана. Пользователи могут открыть быстрые настройки и выбрать значок, чтобы увидеть, какие приложения в данный момент используют микрофон или камеру. На рисунке 2 показан пример скриншота с этими значками.
Определить местоположение индикаторов на экране
Если ваше приложение поддерживает режим погружения или полноэкранный пользовательский интерфейс, индикаторы могут на мгновение перекрывать пользовательский интерфейс приложения. Чтобы адаптировать пользовательский интерфейс к этим индикаторам, система использует метод getPrivacyIndicatorBounds()
, который демонстрируется в следующем фрагменте кода. Используя этот API, вы можете определить границы отображения индикаторов. После этого вы можете решить иначе организовать пользовательский интерфейс экрана.
Котлин
view.setOnApplyWindowInsetsListener { view, windowInsets -> val indicatorBounds = windowInsets.getPrivacyIndicatorBounds() // change your UI to avoid overlapping windowInsets }
Переключатели
На поддерживаемых устройствах под управлением Android 12 или более поздней версии пользователи могут включать и отключать доступ к камере и микрофону для всех приложений на устройстве, нажав один переключатель. Доступ к переключаемым параметрам можно получить из раздела «Быстрые настройки» , как показано на рисунке 3, или из раздела «Конфиденциальность» в системных настройках.
Переключение камеры и микрофона влияет на все приложения на устройстве:
- Когда пользователь отключает доступ к камере, ваше приложение получает пустой поток изображения с камеры.
Когда пользователь отключает доступ к микрофону, ваше приложение получает беззвучный звук. Кроме того, датчики движения ограничены по частоте , независимо от того, объявлено ли разрешение
HIGH_SAMPLING_RATE_SENSORS
.
Когда пользователь отключает доступ к камере или микрофону, а затем запускает приложение, которому необходим доступ к информации о камере или микрофоне, система напоминает пользователю, что переключатель на уровне устройства отключен.
Проверьте поддержку устройства
Чтобы проверить, поддерживает ли устройство переключение микрофона и камеры, добавьте логику, показанную в следующем фрагменте кода:
Котлин
val sensorPrivacyManager = applicationContext .getSystemService(SensorPrivacyManager::class.java) as SensorPrivacyManager val supportsMicrophoneToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.MICROPHONE) val supportsCameraToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.CAMERA)
Ява
SensorPrivacyManager sensorPrivacyManager = getApplicationContext() .getSystemService(SensorPrivacyManager.class); boolean supportsMicrophoneToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.MICROPHONE); boolean supportsCameraToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.CAMERA);