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 solicitarSYSTEM_ALERT_WINDOW
receberá a permissão automaticamente. Se o app perderROLE_CALL_SCREENING
, ele perderá a permissão.Qualquer app que esteja capturando a tela por meio de uma
MediaProjection
e soliciteSYSTEM_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
.
- O método
getLine1Number()
nas classesTelephonyManager
eTelecomManager
. - O método
getMsisdn()
não compatível na classeTelephonyManager
.
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:
- 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. - 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