Como parte da melhoria da qualidade do app e da proteção da privacidade do usuário, recomendamos minimizar o uso de permissões nos apps. Isso ajuda os usuários a descobrir e usar apps de alta qualidade que oferecem um ambiente seguro.
Solicitar permissões dos usuários interrompe o fluxo de usuários, e eles podem negar sua solicitação. Além disso, sempre que você declarar uma nova permissão, será necessário analisar como o app solicita e compartilha dados do usuário. Algumas permissões e APIs muito sensíveis exigem que você declare, no app, os dados que você acessa, coleta, usa e compartilha.
Há várias outras maneiras de minimizar o uso de permissões:
- Declare permissões que forneçam informações de localização aproximada se o app precisar apenas disso.
- Chame APIs que permitem que o app execute a funcionalidade que você quiser sem declarar permissões.
- Invoque intents ou manipuladores de eventos específicos para executar a funcionalidade, em vez de declarar permissões.
- O sistema fornece contratos integrados para diferentes operações de arquivos e também oferece suporte a contratos personalizados.
Se for necessário declarar uma permissão, sempre respeite a decisão do usuário e possibilite a degradação suave da experiência do app.
Esta página 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
. Ela 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, peça para o usuário inserir um endereço ou CEP.
Outros casos de uso exigem uma estimativa mais precisa da localização de um dispositivo. Essas
são as únicas situações em que você pode declarar a
permissão
ACCESS_FINE_LOCATION
.
Criar e acessar arquivos
O Android permite criar e acessar arquivos sem precisar declarar nenhuma permissão relacionada ao armazenamento ou aos sensores.
Abrir arquivos de mídia
O app pode permitir que os usuários escolham fotos e vídeos, por exemplo, para anexos de mensagens ou fotos de perfil.
Para oferecer suporte a essa funcionalidade, use o seletor de fotos. Ele não exige nenhuma permissão de execução. Quando um usuário interage com o seletor para escolher vídeos ou fotos e compartilhar com seu app, o sistema concede acesso de leitura temporário ao URI associado aos arquivos de mídia selecionados.
Se o app precisar acessar arquivos de mídia sem usar o seletor de fotos, não será necessário declarar nenhuma permissão de armazenamento:
- Se você acessar arquivos de mídia criados pelo app, ele já terá acesso a eles no armazenamento de mídia.
- Se você acessar arquivos de mídia criados por outros apps, use o framework de acesso ao armazenamento.
Abrir documentos
Seu app pode mostrar documentos que o usuário criou no seu app ou em outro. Um exemplo comum é um arquivo de texto.
Nessa situação, declare o
READ_EXTERNAL_STORAGE
apenas para compatibilidade com dispositivos mais antigos. Defina a android:maxSdkVersion
como
28
.
Dependendo do app que criou o documento, siga um destes procedimentos:
- Se o usuário criou o documento no seu app, acesse-o diretamente.
- Se o usuário criou o documento em outro app, use o Framework de acesso ao armazenamento.
Tirar uma foto
Os usuários podem tirar fotos no seu app usando o app de câmera pré-instalado do sistema.
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 pré-instalado do sistema.
Nessa situação, não declare a permissão CAMERA
. Em vez disso,
invoque a ação da intent
ACTION_VIDEO_CAPTURE
.
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 ela está sendo executada. 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 diante. 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.
Inserir automaticamente o número de um cartão de pagamento
O Google Play Services oferece uma biblioteca que permite inserir automaticamente um
número de cartão de pagamento. Em vez de declarar a permissão CAMERA
, use
a biblioteca
de reconhecimento de cartão de débito e
crédito.
Gerenciar ligações e mensagens de texto
O Android e o Google Play Services oferecem bibliotecas que permitem gerenciar ligações e mensagens de texto sem precisar declarar nenhuma permissão relacionada a chamadas ou mensagens SMS.
Inserir uma senha única automaticamente
Para otimizar um fluxo de trabalho de autenticação de dois fatores, seu app pode inserir automaticamente a senha de uso único enviada para o dispositivo de um usuário para verificar a identidade.
Para oferecer suporte a essa funcionalidade em dispositivos com o Google Play Services, não
declare a permissão READ_SMS
. Em vez disso, use a API SMS
Retriever.
Em outros dispositivos, se o app for direcionado ao Android 8.0 (nível 26 da API) ou
versões mais recentes, gere um token específico para o app usando
createAppSpecificSmsToken()
. Transmita esse token para
outro app ou serviço que possa enviar uma mensagem SMS de verificação.
Inserir o número de telefone do usuário automaticamente
Para oferecer vendas ou suporte mais eficientes, o app pode permitir que o usuário insira o número de telefone do dispositivo automaticamente.
Para oferecer suporte a essa funcionalidade em dispositivos com o Google Play Services, não
declare a permissão READ_PHONE_STATE
. Em vez disso, use a biblioteca Phone Number
Hint.
Filtrar ligações telefônicas
Para que interrupções desnecessárias não atrapalhem o usuário, seu app pode filtrar ligações 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 de
instalação CALL_PHONE
para impedir que dispositivos que não podem fazer ligações, como
alguns tablets, instalem seu aplicativo.
Pausar mídia quando o app for interrompido
Se o usuário receber uma ligação ou se um alarme configurado pelo usuário tocar, 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.
Ler códigos de barras
O Android oferece suporte para a API Google Code Scanner, com tecnologia do Google Play Services, que permite decodificar códigos de barras sem declarar nenhuma permissão de câmera. Essa API ajuda a preservar a privacidade do usuário e diminui a probabilidade de você precisar criar uma interface personalizada para seu caso de uso de leitura de código de barras.
A API lê o código de barras e retorna apenas os resultados da leitura para o app. As imagens são processadas no dispositivo, e o Google não armazena dados nem verifica os resultados.
Se o app precisar oferecer suporte para casos de uso complexos ou formatos de código de barras ou se exigir uma interface personalizada, use a API de leitura de código de barras do kit de ML.