Minimizar suas solicitações de permissão

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

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ê explique, no app, os dados que você acessa, coleta, usa e compartilha.

Considere se você realmente precisa da permissão ou se há outra maneira de oferecer suporte à funcionalidade no app. O sistema oferece contratos integrados para diferentes operações de arquivos e também 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.

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.

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:

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:

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.

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.

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.