Разрешения времени выполнения в Android 6 и более поздних версиях позволяют пользователям контролировать, когда они разрешают запись звука с микрофона устройства или видео с камеры. Прежде чем приложение сможет начать запись, пользователь должен предоставить или отклонить разрешение в диалоговом окне, которое отображается в системе.
Android 12 обеспечивает пользователям прозрачность, отображая индикаторы, когда приложение использует личный источник данных через разрешения app-op для камер и микрофона. App-op фиксирует доступ к API, защищенным разрешениями во время выполнения.
App-op отслеживает как статус активности, так и количество отдельных вызовов API, взаимодействуя с индикаторами микрофона и камеры в Android 12, чтобы показывать пользователям, когда приложения обращаются к аудиоданным и данным камеры на их устройствах. Нажимая на индикаторы микрофона или камеры, пользователи видят, какие приложения обращаются к их данным. Эта функция обязательна для всех OEM-производителей.
Требования к видимости индикатора
Ниже приведены требования к индикаторам микрофона и камеры на устройствах под управлением Android 12 и выше:
- Индикаторы должны отображаться в строке состояния и сохранять наивысший визуальный приоритет (например, располагаться в крайней правой позиции в правом верхнем углу).
- Индикаторы должны быть всегда расположены в одном и том же месте и не должны блокироваться приложением при его запуске.
- Оба индикатора должны быть зеленого (или вариации зеленого) цвета.
- При нажатии на один или оба индикатора должно отображаться уведомление об атрибуции приложения, которое выполняет следующие действия:
- Отображает название приложения, которое использует микрофон и (или) камеру.
- Отображает название приложения, которое использовало микрофон и (или) камеру в течение последних 15 секунд.
- Переносит пользователей на страницу разрешений приложения в настройках.
Использование и особенности
В Android 12 пользовательский интерфейс различает текущие и недавние использования. Использования считаются активными, если они отмечены системой как текущие или произошли менее 5 секунд назад.
- Значки в строке состояния отображаются каждый раз, когда приложение имеет доступ к микрофону или камере, чувствительным к действиям пользователя.
- Пользователи могут нажать на эти значки и увидеть, какие приложения получают доступ к микрофону, камере или к обоим.
Рисунок 1. Индикаторы использования микрофона и камеры, показывающие активный доступ (правый верхний угол)
Доступ считается активным, пока отображаются индикаторы. Сначала появляется значок, затем он превращается в точку, которая отображается до тех пор, пока приложение не будет закрыто или не будет свернуто.
Когда пользователь открывает быстрые настройки и нажимает на индикаторы, появляется диалоговое окно, показывающее, использует ли приложение камеру, микрофон или и то, и другое.
Рисунок 2. Индикаторы активного и недавнего доступа
На рисунке 2 показаны индикаторы активного доступа, которые появляются, когда к данным в течение последних 5 секунд обращалось запущенное приложение.
Индикаторы недавнего доступа показывают, что приложение обращалось к данным в течение последних 15 секунд, но само приложение неактивно. В диалоговом окне отображаются все активные приложения, но только одно из них указано как источник недавнего доступа, даже если в течение последних 15 секунд к данным обращалось более одного приложения. Представление доступа остаётся замороженным, пока пользователь не закроет диалоговое окно уведомления.
Доставить и включить
Класс PermissionManager
предоставляет метод заполнения диалогового окна, которое находится в системном пользовательском интерфейсе.
- Пользовательский интерфейс системы реагирует на переключение конфигурации устройства:
privacy/mic_camera_indicators_enabled
. - Такое переключение необходимо, поскольку существуют два отдельных средства доставки, расположенных в следующем порядке:
- Доставлять.
- Давать возможность.
- Пользовательский интерфейс системы не должен аварийно завершать работу, если метод в
PermissionManager
не может предоставить необходимые данные.
Поток процесса
Функциональность индикатора разрешений состоит из трех основных частей:
- Приложения
- Индикаторы (обрабатываются SystemUI)
- Способ определить, какие приложения используют данные
PermissionController
предоставляет механизм определения, какие приложения используют данные. SystemUI отслеживает приложения, использующие личные данные. SystemUI отображает значок в верхней панели навигации, соответствующий используемым разрешениям. PermissionController
отображает данные об использовании данных, когда пользователь нажимает на значок.
Рисунок 3. Компоненты системы и поток переходов (UI)
Пронумерованные переходы на рисунке 3 описаны ниже:
1. Приложение запрашивает личные данные из системы.
2. Система проверяет разрешения. Если разрешения есть, система уведомляет поставщика данных и отмечает использование в app-ops.
3. Поставщик данных предоставляет данные приложению.
4-5 Пользователь нажимает на значки. Системный пользовательский интерфейс запрашивает данные из PermissionManager
и отображает диалоговое окно для пользователя.
Подробности процесса
- Приложения используют микрофон и камеру, вызывая
AppOpsManager.startOp
,stopOp
и (или)noteOp
. Это создаёт записи app-op на системном сервере. - Системный пользовательский интерфейс отслеживает новые операции приложения с помощью прослушивателей
AppOpsManager.OnOpActiveChangedInternalListener
иOnOpNotedListener
. При поступлении нового использования (через вызовstartOp
илиnoteOp
) системный пользовательский интерфейс проверяет, что это использование системным приложением. - Если системный пользовательский интерфейс проверяет использование системного приложения и если используется микрофон, системный пользовательский интерфейс проверяет, отключен ли микрофон.
- Если системный пользовательский интерфейс подтверждает использование несистемного приложения (а в случае использования микрофона — что микрофон включен, а в случае использования камеры — что камера включена), он отображает значок, отражающий такое использование.
Если системный пользовательский интерфейс получает событие noteOp
, не имеющее длительности, значок отображается не менее 5 секунд. В противном случае значок отображается либо до получения события stopOp
, либо в течение 5 секунд, в зависимости от того, что дольше. Нажатие пользователем значка инициирует намерение, которое отправляется в PermissionController
для запуска диалога.
PermissionController
загружает все недавние данные об использовании микрофона и камеры. Он проверяет, запущены ли какие-либо из них или были запущены в течение периода времени, заданного системным интерфейсом. Если обнаруживается совпадение, отображается название приложения, использовавшего разрешение, и какие разрешения оно использовало.
Из-за этого изменения в Android 12 и более поздних версиях некоторым приложениям придется либо изменить свое поведение, либо реализовать особое поведение.
Телефония должна реализовать использование разрешений (для учета отдельного стека микрофонов, используемых во время телефонных звонков) при работе с приложением Android Google Search (AGSA) и Google Mobile Services (GMS).