Объясните доступ к более конфиденциальной информации

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

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

В частности, убедитесь, что вы делаете в своем приложении следующее:

  • Подождите, чтобы получить доступ к камере устройства, пока пользователь не предоставит разрешение CAMERA вашему приложению.
  • Подождите, чтобы получить доступ к микрофону устройства, пока пользователь не предоставит разрешение RECORD_AUDIO вашему приложению.
  • Подождите, пока пользователь не взаимодействует с функцией вашего приложения, требующей определения местоположения, прежде чем запрашивать разрешение ACCESS_COARSE_LOCATION или разрешение ACCESS_FINE_LOCATION , как описано в руководстве о том, как запросить разрешения на определение местоположения .
  • Подождите, пока пользователь предоставит вашему приложению разрешение ACCESS_COARSE_LOCATION или разрешение ACCESS_FINE_LOCATION прежде чем запрашивать разрешение ACCESS_BACKGROUND_LOCATION .

Панель конфиденциальности

Вертикальная временная шкала показывает различные приложения, которые имели доступ к информации о местоположении, а также время, когда произошел доступ.
Рис. 1. Экран использования местоположения, часть панели конфиденциальности.

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

Покажите обоснование доступа к данным

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

Чтобы объяснить, почему ваше приложение получает доступ к информации о местоположении, камере и микрофоне, выполните следующие действия:

  1. Добавьте действие, которое при запуске дает некоторое обоснование того, почему ваше приложение выполняет определенный тип действия по доступу к данным. В этом действии установите для атрибута android:permission значение START_VIEW_PERMISSION_USAGE .

    Если ваше приложение предназначено для Android 12 или более поздней версии, вы должны явно определить значение атрибута android:exported .

  2. Добавьте следующий фильтр намерений к только что добавленному действию:

    <!-- 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>
    
  3. Решите, что должно отражать ваше обоснование доступа к данным. Например, вы можете показать веб-сайт вашего приложения или статью Справочного центра. Чтобы предоставить более подробное объяснение типов данных, к которым обращается ваше приложение, а также того, когда произошел доступ, обработайте дополнительные сведения, которые система включает, когда она вызывает намерение использования разрешения:

    • Если система вызывает 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 , пользователи будут видеть значок рядом с именем вашего приложения всякий раз, когда ваше приложение появляется на экране панели конфиденциальности.

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

Скругленный прямоугольник в правом верхнем углу со значком камеры и значком микрофона.
Рисунок 2. Индикаторы микрофона и камеры, показывающие недавний доступ к данным.

Индикаторы

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

Определить расположение индикаторов на экране

Если ваше приложение поддерживает режим погружения или полноэкранный пользовательский интерфейс, индикаторы могут на мгновение перекрыть пользовательский интерфейс вашего приложения. Чтобы помочь адаптировать ваш пользовательский интерфейс к этим индикаторам, система представляет метод getPrivacyIndicatorBounds() , который демонстрируется в следующем фрагменте кода. Используя этот API, вы можете определить границы, где могут появляться индикаторы. Затем вы можете решить организовать пользовательский интерфейс вашего экрана по-другому.

Котлин

view.setOnApplyWindowInsetsListener { view, windowInsets ->
    val indicatorBounds = windowInsets.getPrivacyIndicatorBounds()
    // change your UI to avoid overlapping
    windowInsets
}

Переключает

Плитки быстрых настроек имеют надписи «Доступ к камере» и «Доступ к микрофону».
Рисунок 3. Переключение микрофона и камеры в быстрых настройках.

На поддерживаемых устройствах под управлением 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);