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.

Várias permissões estão 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 explica como solicitar permissões de localização em cada caso.

Para solicitar permissões de localização, siga as práticas recomendadas para todas as permissões de execução.

Tipos de acesso à localização

Cada permissão tem uma combinação das seguintes características:

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 persistente. 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, é necessário declarar um tipo de serviço em primeiro plano de location, conforme mostrado no snippet de código abaixo. No Android 10 (nível 29 da API) 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 o app solicitar a permissão ACCESS_COARSE_LOCATION ou a ACCESS_FINE_LOCATION, conforme mostrado no snippet a seguir:

<manifest ... >
  <!-- Always include this permission -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

  <!-- Include only if your app benefits from precise location access. -->
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

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. A precisão da localização em segundo plano é igual à precisão da localização em primeiro plano, que depende das permissões de localização declaradas pelo app.

No Android 10 (nível 29 da API) 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 durante a 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>

Precisão

O Android é compatível com os seguintes níveis de precisão de local:

Aproximada
Fornece uma estimativa de local do dispositivo. Se ela vier do LocationManagerService ou do FusedLocationProvider, essa estimativa vai ter uma precisão de aproximadamente 3 quilômetros quadrados. Seu app pode receber locais com esse nível de precisão quando você declara a permissão ACCESS_COARSE_LOCATION, mas não a ACCESS_FINE_LOCATION.
Exata
Fornece a estimativa de local do dispositivo mais precisa possível. Se a estimativa de localização for do LocationManagerService ou FusedLocationProvider, ela geralmente vai ficar dentro de 50 metros (160 pés) e às vezes chegar a 3 metros ou menos. Seu app pode receber locais com esse nível de precisão quando você declara a permissão ACCESS_FINE_LOCATION.

Se o usuário conceder a permissão de localização aproximada, o app só vai ter acesso ao local aproximado, independentemente das permissões de localização que o app declarar.

O app ainda funcionará quando o usuário conceder apenas o acesso aproximado ao local. Se um recurso do seu app realmente precisar de acesso à localização precisa usando a permissão ACCESS_FINE_LOCATION, peça ao usuário para permitir que seu app acesse a localização precisa.

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

No Android 10 (nível 29 da API) 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 à localização em segundo plano, 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 8.

Conferir se há requisitos de localização nas dependências do SDK do app

Verifique se o app usa SDKs que dependem das permissões de localização, principalmente a permissão ACCESS_FINE_LOCATION. Leia a postagem do blog Como conhecer o comportamento das dependências do SDK no Medium para saber mais.

Outros recursos

Para ter mais informações sobre permissões de localização no Android, consulte o seguinte material:

Codelabs

Vídeos

Amostras

  • App de exemplo para demonstrar o uso de permissões de localização.