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 ou documentos de outro app
Seu app pode mostrar conteúdo criado por outro app, como fotos, vídeos ou arquivos de texto.
Nessa situação, não declare a permissão READ_EXTERNAL_STORAGE
. Além disso,
não acesse diretamente dispositivos compartilhados ou externos usando métodos como
getExternalStorageDirectory()
,
que estão obsoletos a partir do Android 10 (API de nível 29). Em vez disso, use o
armazenamento de mídia do dispositivo para abrir arquivos de mídia e o
Framework de acesso ao armazenamento para
abrir documentos e outros arquivos.
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 (API de nível 29). 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
.