Minimizar suas solicitações de permissão

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Antes de declarar as permissões no seu app, considere se é necessário fazer isso. Sempre que o usuário testar um recurso do app que exija uma permissão de tempo de execução, seu app precisará interromper o trabalho do usuário com uma solicitação de permissão. Então, o usuário precisará decidir. Se o usuário não entender por que seu app solicita uma permissão específica, ele poderá negá-la ou até mesmo desinstalar o app.

Verifique se outro app instalado pode executar a funcionalidade em nome do seu app. Nesses casos, delegue a tarefa para outro app usando uma intent. Ao fazer isso, não é preciso declarar as permissões necessárias, porque o outro app declara a permissão.

Alternativas para declarar permissões

Esta seção descreve vários casos de uso que seu app pode atender sem declarar a necessidade de permissões.

Mostrar lugares próximos

Seu app pode precisar saber a localização aproximada do usuário. Isso é útil para mostrar informações que reconhecem a localização, como restaurantes nas proximidades.

Alguns casos de uso exigem apenas uma estimativa aproximada da localização de um dispositivo. Nessas situações, siga um dos procedimentos abaixo, dependendo da frequência com que o app precisa de informações com reconhecimento de local:

  • Se o app precisa da localização com frequência, declare a permissão ACCESS_COARSE_LOCATION. A permissão fornece uma estimativa de local do dispositivo com base nos serviços de localização, conforme descrito na documentação sobre precisão do local aproximado.
  • Caso o app precise da localização com menos frequência ou apenas uma vez, considere solicitar que o usuário insira um endereço ou CEP.

Outros casos de uso exigem uma estimativa mais precisa da localização de um dispositivo. Nessas situações, os usuários só podem declarar a permissão ACCESS_FINE_LOCATION.

Tirar uma foto

Os usuários podem tirar fotos no seu app usando o app de câmera do sistema pré-instalado.

Nessa situação, não declare a permissão CAMERA. Em vez disso, invoque a ação da intent ACTION_IMAGE_CAPTURE.

Gravar um vídeo

Os usuários podem gravar vídeos no seu app usando o app de câmera do sistema pré-instalado.

Nessa situação, não declare a permissão CAMERA. Em vez disso, invoque a ação da intent ACTION_VIDEO_CAPTURE.

Abrir mídia criada pelo app

Seu app pode mostrar conteúdo de mídia, como fotos ou vídeos, criado pelo usuário durante o uso do app. Nessa situação, você não precisa usar a permissão READ_EXTERNAL_STORAGE em dispositivos com o Android 10 (API de nível 29) ou versões mais recentes, desde que o app seja voltado para o Android 10 ou mais recente. Caso seu app seja destinado ao Android 10, desative o armazenamento com escopo.

Para compatibilidade com dispositivos mais antigos, declare a permissão READ_EXTERNAL_STORAGE e defina android:maxSdkVersion como 28.

Procure o arquivo em uma das seguintes coleções conhecidas pelo armazenamento de mídia:

Use o ContentResolver para consultar o conteúdo de mídia diretamente no armazenamento de mídia, em vez de tentar descobrir conteúdo por conta própria.

Abrir documentos

Seu app pode mostrar documentos criados pelo usuário, seja em seu app ou em outro. Um exemplo comum é um arquivo de texto.

Nessa situação, você não precisa usar a permissão READ_EXTERNAL_STORAGE em dispositivos com Android 10 ou versões mais recentes, desde que o app seja voltado para o Android 10 ou mais recente. Caso seu app seja destinado ao Android 10, desative o armazenamento com escopo.

Para compatibilidade com dispositivos mais antigos, declare a permissão READ_EXTERNAL_STORAGE e defina android:maxSdkVersion como 28.

Dependendo do app que criou o documento, siga um dos seguintes procedimentos:

Identificar o dispositivo que está executando uma instância do seu app

Uma instância específica do seu app pode precisar saber em qual dispositivo ele está sendo executado. Isso é útil para apps que têm preferências ou mensagens específicas do dispositivo, como playlists diferentes para dispositivos de TV e wearables.

Nessa situação, não acesse o IMEI do dispositivo diretamente. Na verdade, não é possível fazer isso no Android 10. Em vez disso, escolha uma das opções a seguir:

  • Consiga um identificador de dispositivo exclusivo para a instância do seu app usando a biblioteca de ID de instância.
  • Crie seu próprio identificador com escopo do armazenamento do seu aplicativo. Use funções básicas do sistema, como randomUUID().

Parear com um dispositivo por Bluetooth

Seu app pode oferecer uma experiência aprimorada transferindo dados para outro dispositivo por Bluetooth.

Para aceitar essa funcionalidade, não declare as permissões ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATIION ou BLUETOOTH_ADMIN. Em vez disso, use o pareamento de dispositivo complementar.

Pausar mídia quando o app for interrompido

Se o usuário receber uma chamada telefônica ou se ocorrer um alarme configurado pelo usuário, seu app irá pausar qualquer reprodução de mídia até recuperar a seleção de áudio.

Para aceitar essa funcionalidade, não declare a permissão READ_PHONE_STATE. Em vez disso, implemente o manipulador de eventos onAudioFocusChange(), que é executado automaticamente quando o sistema muda a seleção de áudio. Saiba mais sobre como implementar a seleção de áudio.

Filtrar chamadas telefônicas

Para minimizar interrupções desnecessárias do usuário, seu app pode filtrar chamadas telefônicas como spam.

Para aceitar essa funcionalidade, não declare a permissão READ_PHONE_STATE. Em vez disso, use a API CallScreeningService.

Fazer ligações telefônicas

Seu app pode oferecer a possibilidade de fazer uma ligação telefônica tocando nas informações de um contato.

Para oferecer suporte a essa funcionalidade, use a ação da intent ACTION_DIAL em vez da ação ACTION_CALL. ACTION_CALL requer a permissão no momento da instalação CALL_PHONE, que impede que dispositivos que não podem fazer ligações, como alguns tablets, instalem seu aplicativo.

Acessar mensagens SMS

Seu app pode precisar de acesso a mensagens SMS, por exemplo, para receber códigos de autenticação que protegem o usuário contra fraudes.

Para oferecer suporte a essa funcionalidade, se o app for destinado ao Android 8.0 (API de nível 26) ou versões mais recentes, não solicite a permissão READ_SMS como parte da verificação de credenciais do usuário. Em vez disso, gere um token específico do app usando createAppSpecificSmsToken() e transmita esse token para outro app ou serviço que possa enviar uma mensagem SMS de verificação.