Avaliar se o app precisa declarar permissões

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, é necessário delegar a tarefa para outro app usando uma intent. Ao fazer isso, não é preciso declarar as permissões necessárias, porque o outro aplicativo 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 uma estimativa aproximada da localização de um dispositivo, a cerca de 2 quilômetros. Nessas situações, você pode declarar a permissão ACCESS_COARSE_LOCATION. É melhor não declarar a permissão e, em vez disso, 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. Somente nessas situações, não há problema em 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:

Identifique 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, siga um destes procedimentos:

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