As permissões de tempo de execução no Android 6 e versões posteriores dão aos usuários controle sobre quando permitem a gravação de áudio do microfone de um dispositivo ou vídeo da câmera de um dispositivo. Antes que um aplicativo possa gravar, o usuário deve conceder ou negar permissão por meio de uma caixa de diálogo apresentada pelo sistema.
O Android 12 oferece transparência aos usuários, exibindo indicadores quando um aplicativo usa uma fonte de dados privada por meio das câmeras e das permissões de operação do aplicativo de microfone. App-ops registra acessos a APIs protegidas por permissão de tempo de execução.
O App-op rastreia o status da atividade e o número de chamadas de API individuais e interage com os indicadores de microfone e câmera no Android 12 para mostrar aos usuários quando os aplicativos acessaram dados de áudio e câmera em seus dispositivos. Quando os usuários clicam nos indicadores do microfone ou da câmera, eles veem quais aplicativos acessaram seus dados. Este recurso é obrigatório para todos os OEMs.
Requisitos de visibilidade do indicador
Estes são os requisitos para indicadores de microfone e câmera em dispositivos com Android 12 ou superior:
- Os indicadores devem aparecer na barra de status e manter a prioridade visual mais alta (por exemplo, localizados na posição mais à direita, no canto superior direito).
- Os indicadores devem estar consistentemente localizados na mesma posição e não devem ser bloqueados por um aplicativo quando ele for iniciado.
- Ambos os indicadores devem ser de cor verde (ou uma variação de verde).
- Clicar em um ou em ambos os indicadores deve renderizar uma notificação de recursos de atribuição do aplicativo que faz o seguinte:
- Exibe o nome do aplicativo que está usando o microfone e (ou) câmera
- Exibe o nome do aplicativo que usou o microfone e (ou) a câmera nos últimos 15 segundos
- Leva os usuários à página de permissão do aplicativo em Configurações
Uso e recursos
No Android 12, a IU distingue entre usos em execução e usos recentes. Os usos são considerados “ativos” se forem marcados pelo sistema como “em execução” ou tiverem menos de 5 segundos.
- Os ícones da barra de status são exibidos sempre que um aplicativo tem acesso contínuo ao microfone ou à câmera sensível ao usuário.
- Os usuários podem clicar nesses ícones e ver quais aplicativos estão acessando o microfone, a câmera ou ambos.
Figura 1. Indicadores de microfone e câmera em uso mostrando acesso ativo (canto superior direito)
O acesso é considerado ativo enquanto os indicadores mostrarem. Um ícone é exibido primeiro e, em seguida, faz a transição para um ponto que persiste até que o aplicativo seja dispensado ou fechado.
Quando um usuário toca nos indicadores, uma caixa de diálogo é aberta, mostrando que um aplicativo está usando a câmera, o microfone ou ambos.
Figura 2. Indicadores de acesso ativo e recente
A imagem na Figura 2 mostra indicadores de acesso ativo quando os dados foram acessados nos últimos 5 segundos por um aplicativo em execução.
Indicadores de acesso recentes mostram que os dados foram acessados por um aplicativo durante os 15 segundos anteriores, mas que o aplicativo não está ativo. Todos os aplicativos ativos são exibidos na caixa de diálogo, mas apenas um aplicativo é exibido como fonte de acesso recente, mesmo quando mais de um aplicativo acessou dados em um período anterior de 15 segundos. A visualização de acesso permanece congelada até que o usuário feche a caixa de diálogo de notificação.
Entregar e habilitar
A classe PermissionManager
fornece um método para preencher a caixa de diálogo, que reside na UI do sistema.
- A UI do sistema reage a uma opção de configuração do dispositivo:
privacy/mic_camera_indicators_enabled
. - A troca é necessária porque existem dois veículos de entrega separados, nesta ordem:
- Entregar.
- Habilitar.
- A UI do sistema não deverá travar se o método em
PermissionManager
não puder fornecer os dados necessários.
Fluxo de processo
A funcionalidade do Indicador de Permissão tem três partes principais:
- Os aplicativos
- Os indicadores (manuseados pelo SystemUI)
- Uma maneira de determinar quais aplicativos estão usando os dados
O PermissionController
fornece o mecanismo para determinar quais aplicativos estão usando dados. SystemUI escuta aplicativos que usam dados privados. O SystemUI mostra um ícone na barra de navegação superior que corresponde às permissões utilizadas. O PermissionController
exibe dados sobre usos quando um usuário clica em um ícone.
Figura 3. Componentes do sistema e fluxo de transições (IU)
As transições numeradas na Figura 3 são descritas abaixo:
1- Um aplicativo solicita dados privados do sistema.
2- O sistema verifica as permissões. Se as permissões forem permitidas, o sistema notificará o provedor de dados e registrará o uso em app-ops
3- O provedor de dados fornece dados ao aplicativo.
4-5 O usuário clica nos ícones. A UI do sistema solicita dados do PermissionManager
e apresenta a caixa de diálogo ao usuário.
Detalhes do processo
- Os aplicativos usam o microfone e a câmera, chamando
AppOpsManager.startOp
,stopOp
e (ou)noteOp
. Isso cria registros de operação de aplicativo no servidor do sistema. - A IU do sistema escuta novas operações de aplicativos usando os ouvintes
AppOpsManager.OnOpActiveChangedInternalListener
eOnOpNotedListener
. Quando chega um novo uso (por meio de uma chamada parastartOp
ounoteOp
), a IU do sistema verifica se o uso é feito por um aplicativo do sistema. - Se a UI do sistema verificar o uso do aplicativo do sistema e se o uso for para o microfone, a UI do sistema verificará se o microfone está silenciado.
- Se a UI do sistema verificar o uso de aplicativos que não são do sistema (e, para uso do microfone, se o microfone está ativado; para uso da câmera, se a câmera está ligada), ela mostrará um ícone refletindo tal uso.
Se a UI do sistema receber um noteOp
, que não tem duração, ele mostra o ícone por pelo menos 5 segundos. Caso contrário, o ícone será exibido até receber um stopOp
ou por 5 segundos, o que for mais longo. O usuário clicando em um ícone inicia uma intenção que vai para o PermissionController
para iniciar o Dialog.
O PermissionController
carrega todo o uso recente de microfone e câmera. Ele verifica se algum deles está em execução no momento ou dentro do período definido pela UI do sistema. Se encontrar uma correspondência, exibirá o nome do aplicativo que usou a permissão e quais permissões o aplicativo usou.
Devido a essa mudança no Android 12 e versões posteriores, alguns aplicativos devem mudar seu comportamento ou implementar um comportamento especial.
A telefonia deve implementar o uso de permissão (para dar conta da pilha de microfones separada usada em chamadas telefônicas) ao trabalhar com o aplicativo Android Google Search (AGSA) e o Google Mobile Services (GMS).