Los permisos de tiempo de ejecución en Android 6 y versiones posteriores les brindan a los usuarios control sobre cuándo permiten que se grabe el audio del micrófono o el video de la cámara de un dispositivo. Antes de que una app pueda grabar, el usuario debe otorgarle o rechazarle el permiso a través de un diálogo que presenta el sistema.
Para brindar transparencia a los usuarios, Android 12 muestra indicadores cuando una app usa una fuente de datos privada a través de los permisos app-op de la cámara y el micrófono. Las operaciones de aplicaciones registran los accesos a las APIs protegidas por permisos de tiempo de ejecución.
App-op realiza un seguimiento del estado de actividad y la cantidad de llamadas a la API individuales, además de interactuar con los indicadores del micrófono y la cámara en Android 12 para mostrar a los usuarios cuando las apps accedieron a los datos de la cámara y el audio en sus dispositivos. Cuando los usuarios hacen clic en los indicadores del micrófono o de la cámara, ven qué apps accedieron a sus datos. Esta función es obligatoria para todos los OEM.
Requisitos de visibilidad del indicador
Estos son los requisitos para los indicadores de micrófono y cámara en dispositivos que ejecutan Android 12 o versiones posteriores:
- Los indicadores deben aparecer en la barra de estado y retener la prioridad visual más alta (por ejemplo, ubicarse en la posición más a la derecha de la esquina superior derecha).
- Los indicadores deben estar ubicados de forma coherente en la misma posición y no deben estar bloqueados por una app cuando se inicia.
- Ambos indicadores deben ser de color verde (o una variación de este).
- Hacer clic en uno o ambos indicadores debe renderizar una notificación de indicación de atribución de la app que haga lo siguiente:
- Muestra el nombre de la app que está usando el micrófono o la cámara.
- Muestra el nombre de la app que usó el micrófono o la cámara en los últimos 15 segundos.
- Dirige a los usuarios a la página de permisos de la app en Configuración.
Uso y funciones
En Android 12, la IU distingue entre usos en ejecución y usos recientes. Los usos se consideran activos si el sistema los marca como en ejecución o si tienen menos de 5 segundos de antigüedad.
- Los íconos de la barra de estado se muestran cada vez que una app tiene acceso continuo al micrófono o a la cámara del usuario.
- Los usuarios pueden hacer clic en estos íconos y ver qué apps acceden al micrófono, a la cámara o a ambos.
Figura 1: Indicadores de uso del micrófono y la cámara que muestran el acceso activo (esquina superior derecha)
El acceso se considera activo mientras se muestren los indicadores. Primero, se muestra un ícono y, luego, se convierte en un punto que persiste hasta que se descarta o cierra la app.
Cuando un usuario presiona los indicadores, se abre un diálogo que muestra que una app está usando la cámara, el micrófono o ambos.
Figura 2: Indicadores de acceso activo y reciente
En la imagen de la Figura 2, se muestran los indicadores de acceso activo cuando una app en ejecución accedió a los datos en los últimos 5 segundos.
Los indicadores de acceso reciente muestran que una app accedió a los datos durante los 15 segundos anteriores, pero que la app no está activa. Todas las apps activas se muestran en el diálogo, pero solo una se muestra como la fuente del acceso reciente, incluso cuando más de 1 app accedió a los datos en un período anterior de 15 segundos. La vista de acceso permanece inmovilizada hasta que el usuario descarta el diálogo de notificación.
Dar y habilitar
La clase PermissionManager
proporciona un método para propagar el diálogo, que reside en la IU del sistema.
- La IU del sistema reacciona a un cambio de configuración del dispositivo:
privacy/mic_camera_indicators_enabled
. - El cambio es necesario porque hay dos vehículos de entrega separados, en este orden:
- Publica.
- Habilita
- La IU del sistema no debe fallar si el método en
PermissionManager
no puede proporcionar los datos necesarios.
Flujo del proceso
La funcionalidad del Indicador de permisos tiene tres partes principales:
- Las apps
- Los indicadores (controlados por SystemUI)
- Una forma de determinar qué apps usan los datos
PermissionController
proporciona el mecanismo para determinar qué apps están usando datos. SystemUI detecta apps que usan datos privados. SystemUI muestra un ícono en la barra de navegación superior que corresponde a los permisos utilizados. PermissionController
muestra datos sobre los usos cuando un usuario hace clic en un ícono.
Figura 3: Flujo de componentes del sistema y transiciones (IU)
A continuación, se describen las transiciones numeradas en la Figura 3:
1- Una app solicita datos privados del sistema.
2- El sistema verifica los permisos. Si se permiten los permisos, el sistema notifica al proveedor de datos y anota el uso en las operaciones de apps.
3- El proveedor de datos le proporciona datos a la app.
4-5 El usuario hace clic en los íconos. La IU del sistema solicita datos de PermissionManager
y le presenta el diálogo al usuario.
Detalles del proceso
- Las apps usan el micrófono y la cámara, y llaman a
AppOpsManager.startOp
,stopOp
onoteOp
. Esto crea registros app-op en el servidor del sistema. - La IU del sistema detecta nuevas operaciones de apps con los objetos de escucha
AppOpsManager.OnOpActiveChangedInternalListener
yOnOpNotedListener
. Cuando llega un uso nuevo (a través de una llamada astartOp
onoteOp
), la IU del sistema verifica que el uso sea de una app del sistema. - Si la IU del sistema verifica el uso de la app del sistema y si el uso es para el micrófono, la IU del sistema verifica si el micrófono está silenciado.
- Si la IU del sistema verifica el uso de apps que no son del sistema (y, para el uso del micrófono, que el micrófono esté activado; para el uso de la cámara, que la cámara esté activada), muestra un ícono que refleja ese uso.
Si la IU del sistema recibe un noteOp
, que no tiene duración, muestra el ícono durante al menos 5 segundos. De lo contrario, el ícono se muestra hasta que recibe un stopOp
o durante 5 segundos, lo que dure más. Cuando el usuario hace clic en un ícono, se inicia un intent que va al PermissionController
para iniciar el diálogo.
PermissionController
carga todo el uso reciente del micrófono y la cámara. Comprueba si alguno de ellos se está ejecutando o se ejecutó dentro del período establecido por la IU del sistema. Si encuentra una coincidencia, muestra el nombre de la app que usó el permiso y qué permisos usó.
Debido a este cambio en Android 12 y versiones posteriores, algunas apps deben cambiar su comportamiento o implementar un comportamiento especial.
La telefonía debe implementar el uso de permisos (para tener en cuenta la pila de micrófonos independiente que se usa en las llamadas telefónicas) mientras se trabaja con la app de Búsqueda de Google para Android (AGSA) y los Servicios de Google para dispositivos móviles (GMS).