O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Solicitar permissões de localização

Para proteger a privacidade do usuário, os apps que usam serviços de localização precisam solicitar permissões de localização.

Ao solicitar permissões de localização, siga as mesmas práticas recomendadas de qualquer outra permissão durante a execução. Uma diferença importante quando se trata de permissões de localização é que o sistema inclui várias permissões relacionadas à localização. As permissões solicitadas e a forma como você as solicita dependem dos requisitos de localização do caso de uso do seu app.

Esta página descreve os diferentes tipos de requisitos de localização e oferece orientações sobre como solicitar permissões de localização em cada caso.

Tipos de acesso à localização

As permissões de localização do Android processam as seguintes categorias de acesso à localização:

Esta seção descreve as situações em que o app usa cada categoria.

Localização em primeiro plano

Se o app tiver um recurso que compartilhe ou receba informações de localização apenas uma vez ou por um período definido, esse recurso exigirá acesso à localização em primeiro plano. Veja alguns exemplos:

  • Em um app de navegação, um recurso permite que os usuários recebam rotas passo a passo.
  • Em um app de mensagens, um recurso permite que os usuários compartilhem a localização atual com outro usuário.

O sistema considera que seu app está usando a localização em primeiro plano se um recurso do app acessar a localização atual do dispositivo em uma das seguintes situações:

  • Uma atividade pertencente ao seu app está visível.
  • Seu app está executando um serviço em primeiro plano. Quando um serviço em primeiro plano está em execução, o sistema aumenta o reconhecimento do usuário mostrando uma notificação contínua. Seu app mantém o acesso quando está em segundo plano, como quando o usuário pressiona o botão Início no dispositivo ou bloqueia a tela.

    Além disso, é recomendável declarar um tipo de serviço em primeiro plano de location, conforme mostrado no snippet de código a seguir. No Android 10 (API de nível 29) e versões mais recentes, é necessário declarar esse tipo de serviço em primeiro plano.

    <!-- Recommended for Android 9 (API level 28) and lower. -->
    <!-- Required for Android 10 (API level 29) and higher. -->
    <service
        android:name="MyNavigationService"
        android:foregroundServiceType="location" ... >
        <!-- Any inner elements would go here. -->
    </service>
    

Declare a necessidade de localização em primeiro plano quando seu app solicitar a permissão ACCESS_COARSE_LOCATION ou ACCESS_FINE_LOCATION, conforme mostrado no snippet a seguir:

<manifest ... >
  <!-- To request foreground location access, declare one of these permissions. -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

O nível de precisão depende da permissão solicitada:

ACCESS_COARSE_LOCATION
Fornece precisão de localização de um quarteirão.
ACCESS_FINE_LOCATION
Fornece uma localização mais precisa do que a fornecida quando você solicita ACCESS_COARSE_LOCATION. Essa permissão é necessária para algumas tarefas de conectividade, como a conexão com dispositivos próximos por Bluetooth de baixa energia (BLE, na sigla em inglês).

Localização em segundo plano

Um app exige acesso à localização em segundo plano se um recurso do app compartilha constantemente a localização com outros usuários ou usa a API Geofence. Entre os exemplos estão os seguintes:

  • Em um app para compartilhamento de local com a família, um recurso permite que os usuários compartilhem a localização com os membros da família de forma contínua.
  • Em um app de IoT, um recurso permite que os usuários configurem os dispositivos da casa para que sejam desligados quando eles saem de casa e ligados novamente quando voltam.

O sistema considera que seu app está usando a localização em segundo plano se ele acessa a localização atual do dispositivo em qualquer situação diferente das descritas na seção primeiro plano.

No Android 10 (API de nível 29) e versões mais recentes, é necessário declarar a permissão ACCESS_BACKGROUND_LOCATION no manifesto do app para solicitar acesso à localização em segundo plano no tempo de execução. Nas versões anteriores do Android, quando o app recebe acesso à localização em primeiro plano, também recebe acesso à localização em segundo plano automaticamente.

<manifest ... >
  <!-- Required only when requesting background location access on
       Android 10 (API level 29) and higher. -->
  <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>

Solicitar acesso à localização no momento da execução

Quando um recurso do seu app precisa de acesso à localização, aguarde até que o usuário interaja com o recurso antes de solicitar a permissão. Esse fluxo de trabalho segue a prática recomendada de solicitar permissões de tempo de execução dentro do contexto, conforme descrito no guia sobre como solicitar permissões do app.

A Figura 1 mostra um exemplo de como executar esse processo. O app contém um recurso "compartilhar localização" que requer acesso à localização em primeiro plano. No entanto, a permissão de localização só é solicitada quando o usuário seleciona o botão Compartilhar localização.

Depois que o usuário seleciona o botão
Figura 1. Recurso de compartilhamento de localização que precisa de acesso à localização em primeiro plano. O recurso será ativado se o usuário selecionar Permitir durante o uso do app.

Mesmo que vários recursos do seu app precisem de acesso à localização, é provável que apenas alguns deles precisem de acesso à localização em segundo plano. Portanto, é recomendado que o app faça solicitações incrementais de permissão de localização, pedindo o acesso à localização em primeiro plano e, depois, em segundo plano. Com as solicitações incrementais, você oferece aos usuários mais controle e transparência, porque eles podem entender melhor quais recursos do app precisam de acesso à localização em segundo plano.

A Figura 2 mostra um exemplo de app desenvolvido para processar solicitações incrementais. Os recursos "mostrar localização atual" e "recomendar lugares por perto" exigem acesso à localização em primeiro plano. No entanto, somente o recurso "recomendar lugares por perto" requer acesso à localização em segundo plano.

O botão que ativa o acesso à localização em primeiro plano fica a meia tela de distância do botão que permite a localização em segundo plano
Figura 2. Os dois recursos exigem acesso à localização, mas apenas o "recomendar lugares por perto" requer acesso à localização em segundo plano.

O processo para fazer solicitações incrementais é o seguinte:

  1. Primeiro, seu app precisa indicar aos usuários os recursos que exigem acesso à localização em primeiro plano, como o recurso "compartilhar localização" da Figura 1 ou "mostrar localização atual" da Figura 2.

    É recomendável desativar o acesso do usuário a recursos que exijam acesso à localização em segundo plano até que o app receba acesso à localização em primeiro plano.

  2. Posteriormente, quando o usuário explorar uma funcionalidade que exija acesso à localização em segundo plano, você poderá solicitar acesso a esse tipo de localização.

Solicitar localização em segundo plano

Figura 3. A página "Configurações" inclui uma opção chamada Permitir o tempo todo, que concede acesso à localização em segundo plano.

Quando um recurso no app solicita uma localização em segundo plano em um dispositivo com Android 10 (nível 29 da API), a caixa de diálogo de permissões do sistema inclui uma opção chamada Permitir o tempo todo. Se o usuário selecionar essa opção, o recurso no seu app terá acesso à localização em segundo plano.

No Android 11 (API de nível 30) e versões mais recentes, a caixa de diálogo do sistema não inclui a opção Permitir o tempo todo. Em vez disso, os usuários precisam ativar a localização em segundo plano em uma página de configurações, conforme mostrado na Figura 3.

É possível ajudar os usuários a acessar essa página de configurações seguindo as práticas recomendadas ao solicitar a permissão de localização em segundo plano. O processo para conceder a permissão depende da versão do SDK de destino do seu app.

O app é direcionado ao Android 11 ou a versões mais recentes

Se o app não tiver a permissão ACCESS_BACKGROUND_LOCATION e shouldShowRequestPermissionRationale() retornar true, mostre uma IU informativa aos usuários que inclua o seguinte:

  • Uma explicação clara sobre por que o recurso do app precisa de acesso à localização em segundo plano.
  • O rótulo visível para o usuário da opção de configurações que concede a localização em segundo plano, por exemplo, Permitir o tempo todo na figura 3. Você pode chamar getBackgroundPermissionOptionLabel() para receber esse rótulo. O valor de retorno desse método é localizado de acordo com a preferência de idioma do dispositivo do usuário.
  • Uma opção para os usuários recusarem a permissão. Se os usuários recusarem o acesso à localização em segundo plano, poderão continuar usando o app.
Os usuários podem tocar na notificação do sistema para mudar as configurações
  de localização de um app
Figura 4. Notificação que lembra ao usuário que ele concedeu acesso à localização em segundo plano a um app.

O app é direcionado ao Android 10 ou anterior

Quando um recurso no seu app solicitar acesso à localização em segundo plano, os usuários verão uma caixa de diálogo do sistema. Essa caixa de diálogo inclui uma opção para navegar até as opções de permissão de localização do app em uma página de configurações.

Se o app já segue as práticas recomendadas para solicitar permissões de localização, não é preciso modificá-lo para ter compatibilidade com esse comportamento.

Lembrete da concessão de localização em segundo plano

No Android 10 e versões mais recentes, quando um recurso do app acessa a localização do dispositivo em segundo plano pela primeira vez depois que o usuário concede acesso a ela, o sistema programa uma notificação para enviar ao usuário. Essa notificação lembra o usuário de que ele permitiu que o app acessasse a localização do dispositivo o tempo todo. Um exemplo dessa notificação é mostrado na Figura 4.