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 voltados para o Android 11 e os apps podem precisar atualizar as permissões declaradas se lerem informações relacionadas a números de telefone.

Queremos receber seu feedback. Responda a esta breve pesquisa para nos contar como você está usando o recurso (link em inglês). Especificamente, conte-nos sobre os casos de uso afetados por esse recurso.

Permissões únicas

No 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.

O app poderá acessar os dados relacionados por um período que depende do comportamento do app e das ações do usuário:

  • Enquanto a atividade do seu app estiver visível, ele poderá acessar os dados.
  • Se o usuário colocar o app em segundo plano, o app poderá continuar acessando os dados por um curto período.
  • Se um serviço for iniciado em primeiro plano enquanto a atividade estiver visível, e o usuário mover o app para o segundo plano, o app continuará acessando os dados relacionados até que o serviço em primeiro plano seja interrompido.
  • Se o usuário revogar a permissão única, nas configurações do sistema, por exemplo, o app não poderá acessar os dados, independentemente de um serviço ter sido iniciado em primeiro plano. Como acontece com qualquer permissão, se o usuário revogar a permissão única do app, o processo do app será encerrado.

Quando o usuário abrir o app e um recurso dele solicitar acesso à localização, ao microfone ou à câmera, o usuário receberá a solicitação novamente.

Redefinir automaticamente permissões de apps não utilizados

Se o app for voltado para o Android 11 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 alterasse 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 no seu app, você precisa verificar se os recursos têm as permissões necessárias.

Solicitar que o usuário desative a redefinição automática

Se necessário, você pode pedir ao usuário para impedir que o sistema redefina as permissões do seu app. Isso é útil em situações em que os usuários esperam que o app funcione principalmente em segundo plano, mesmo sem o usuário interagir com o app, como nos seguintes casos de uso:

Figura 1. O usuário desativou a redefinição automática de permissões para um determinado app.
  • Fornecer segurança familiar
  • Sincronizar dados
  • Comunicar-se com dispositivos inteligentes
  • Parear com dispositivos complementares

Para direcionar o usuário para a página do app nas configurações do sistema, chame uma intent que inclua a ação Settings.ACTION_APPLICATION_DETAILS_SETTINGS. Nessa tela, os usuários podem impedir que o sistema redefina as permissões do app fazendo o seguinte:

  1. Toque em Permissões, que carrega a tela de configurações Permissões do app.
  2. Desative a opção chamada Remover permissões se o app não for usado, conforme mostrado na Figura 1.

Determinar se a redefinição automática está desativada

Para verificar se a funcionalidade de redefinição automática está desativada para seu app, chame isAutoRevokeWhitelisted(). Se esse método retornar true, o sistema não redefinirá automaticamente as permissões do app.

Testar o recurso de redefinição automática

Para verificar se o sistema redefine as permissões do app, faça o seguinte:

  1. Salve o tempo padrão que o sistema aguarda para redefinir as permissões de um app. Dessa forma, você pode restaurá-lo após o teste:

    threshold=$(adb shell device_config get permissions \
      auto_revoke_unused_threshold_millis2)
    
  2. Reduza o tempo que o sistema aguarda para redefinir as permissões. No exemplo a seguir, o sistema é modificado para redefinir as permissões de um app apenas um segundo depois que você parar de interagir com um app:

    adb shell device_config put permissions \
      auto_revoke_unused_threshold_millis2 1000
    
  3. Invoque o processo de redefinição automática manualmente, conforme mostrado no snippet a seguir. Certifique-se de que o dispositivo de teste esteja ligado por um curto período, cerca de 45 segundos, antes de executar este comando.

    adb shell cmd jobscheduler run -u 0 -f \
      com.google.android.permissioncontroller 2
    
  4. Verifique se o app pode processar o evento de redefinição automática.

  5. Restaure o tempo padrão que o sistema aguarda antes de redefinir automaticamente as permissões de um app:

    adb shell device_config put permissions \
      auto_revoke_unused_threshold_millis2 $threshold
    

Visibilidade da caixa de diálogo de permissões

O Android 11 não incentiva solicitação de permissões que os usuários escolheram negar. Se o usuário tocar repetidamente em Negar para uma permissão específica durante a vida útil do app em um dispositivo, essa ação implicará "não perguntar novamente".

Se o app já segue as práticas recomendadas relacionadas a permissões, não é necessário alterá-lo para oferecer compatibilidade com essa mudança de comportamento.

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 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="READ_PHONE_STATE"
                     android:maxSdkVersion="29" />
    <uses-permission android:name="READ_PHONE_NUMBERS" />
</manifest>