Atualizações de permissões no Android 11

O Android 11 dá aos usuários a capacidade de especificar permissões mais granulares para localização, microfone e câmera. Além disso, o sistema redefine as permissões de apps não utilizados direcionados ao Android 11 ou a versões mais recentes, e os apps podem precisar atualizar as permissões declaradas caso usem a janela de alertas do sistema ou leiam informações relacionadas a números de telefone.

Permissões únicas

A partir do Android 11, sempre que seu app solicitar uma permissão relacionada à localização, ao microfone ou à câmera, a caixa de diálogo de permissões do usuário exibirá uma opção chamada Somente desta vez. Se o usuário selecionar essa opção na caixa de diálogo, seu app receberá uma permissão única temporária.

Saiba mais sobre como o sistema processa permissões únicas.

Redefinir automaticamente permissões de apps não utilizados

Se o app for direcionado ao Android 11 ou a versões mais recentes e não for usado por alguns meses, o sistema protegerá os dados do usuário redefinindo automaticamente as permissões confidenciais que o usuário concedeu a ele. Essa ação tem o mesmo efeito que se o usuário visualizasse uma permissão nas configurações do sistema e mudasse o nível de acesso do app para Negar. Se o app seguir as práticas recomendadas para solicitar permissões no tempo de execução, não será necessário fazer mudanças nele. Isso ocorre porque, conforme o usuário interage com os recursos do app, você precisa verificar se os recursos têm as permissões necessárias.

Saiba mais sobre como o sistema redefine automaticamente as permissões de apps não utilizados.

Visibilidade da caixa de diálogo de permissões

A partir do Android 11, se o usuário tocar em Negar para uma permissão específica mais de uma vez durante a vida útil do app em um dispositivo, a caixa de diálogo de permissões do sistema não será exibida se o app solicitar a permissão novamente. A ação do usuário implica "não perguntar novamente". Em versões mais antigas, os usuários tinham acesso à caixa de diálogo de permissões do sistema cada vez que o app solicitava uma permissão, a menos que uma caixa de seleção "não perguntar novamente" tivesse sido selecionada. Essa mudança de comportamento no Android 11 não incentiva solicitações repetidas de permissões que os usuários negaram.

Para identificar se um app teve permissões permanentemente negadas (para fins de depuração e teste), use este comando:

adb shell dumpsys package PACKAGE_NAME

Em que PACKAGE_NAME é o nome do pacote a ser inspecionado.

A saída do comando contém seções parecidas com esta:

...
runtime permissions:
  android.permission.POST_NOTIFICATIONS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
  android.permission.ACCESS_FINE_LOCATION: granted=false, flags=[ USER_SET|USER_FIXED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
  android.permission.BLUETOOTH_CONNECT: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
...

As permissões que foram negadas uma vez pelo usuário são sinalizadas com USER_SET. As que foram negadas permanentemente selecionando a opção Negar duas vezes são sinalizadas com USER_FIXED.

Durante o teste, convém redefinir essas flags para garantir que os testadores não se surpreendam quando a caixa de diálogo de solicitação não for mostrada. Para fazer isso, use o comando:

adb shell pm clear-permission-flags PACKAGE_NAME PERMISSION_NAME user-set user-fixed

PERMISSION_NAME é o nome da permissão que você quer redefinir. Para consultar uma lista completa de permissões do app Android, acesse a página de referência da API de permissões.

Saiba mais sobre como processar negação de permissão no app.

Mudanças em janelas de alertas do sistema

O Android 11 faz várias mudanças na forma como os apps recebem a permissão SYSTEM_ALERT_WINDOW. As mudanças visam proteger os usuários, tornando a concessão da permissão mais intencional.

Certos apps recebem a permissão SYSTEM_ALERT_WINDOW automaticamente quando a solicitam

Algumas classes de apps recebem a permissão SYSTEM_ALERT_WINDOW automaticamente quando a solicitam:

  • Todo app que tiver ROLE_CALL_SCREENING e solicitar SYSTEM_ALERT_WINDOW receberá a permissão automaticamente. Se o app perder ROLE_CALL_SCREENING, ele perderá a permissão.

  • Qualquer app que esteja capturando a tela por meio de uma MediaProjection e solicite SYSTEM_ALERT_WINDOW recebe a permissão automaticamente, a menos que o usuário tenha negado a permissão ao app de forma explícita. Quando o app para de capturar a tela, ele perde a permissão. Esse caso de uso é destinado principalmente a apps de transmissão ao vivo de jogos.

Esses apps não precisam enviar ACTION_MANAGE_OVERLAY_PERMISSION para receber a permissão SYSTEM_ALERT_WINDOW. Eles podem solicitar SYSTEM_ALERT_WINDOW diretamente.

Intents MANAGE_OVERLAY_PERMISSION sempre levam o usuário à tela de permissões do sistema

A partir do Android 11, as intents ACTION_MANAGE_OVERLAY_PERMISSION sempre levam o usuário para a tela Configurações de nível superior, em que é possível conceder ou revogar permissões SYSTEM_ALERT_WINDOW para apps. Todos os dados package: da intent são ignorados.

Em versões anteriores do Android, a intent ACTION_MANAGE_OVERLAY_PERMISSION poderia especificar um pacote, o que levaria o usuário a uma tela específica do app para gerenciar a permissão. Essa funcionalidade não é compatível com o Android 11. Em vez disso, o usuário precisa selecionar o app para o qual quer conceder ou revogar a permissão. Essa mudança visa proteger os usuários, tornando a concessão de permissões mais intencional.

Números de telefone

O Android 11 muda a permissão relacionada ao telefone que seu app usa ao ler números de telefone.

Caso seu app seja direcionado ao Android 11 ou a versões mais recentes e precise acessar as APIs de número de telefone mostradas na lista a seguir, você precisa solicitar a permissão READ_PHONE_NUMBERS, em vez da READ_PHONE_STATE.

Se o app declarar READ_PHONE_STATE para chamar métodos diferentes dos listados na lista anterior, você poderá continuar solicitando READ_PHONE_STATE em todas as versões do Android. No entanto, se você usar a permissão READ_PHONE_STATE apenas para os métodos na lista anterior, atualize o arquivo de manifesto da seguinte maneira:

  1. Mude sua declaração de READ_PHONE_STATE para que o app use a permissão apenas no Android 10 (API de nível 29) e versões anteriores.
  2. Adicione a permissão READ_PHONE_NUMBERS.

O snippet de declaração de manifesto a seguir mostra esse processo:

<manifest>
    <!-- Grants the READ_PHONE_STATE permission only on devices that run
         Android 10 (API level 29) and lower. -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"
                     android:maxSdkVersion="29" />
    <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
</manifest>

Outros recursos

Para mais informações sobre as mudanças nas permissões do Android 11, consulte os seguintes materiais:

Vídeos

Desenvolvimento com as mudanças de privacidade mais recentes no Android 11