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:
- Categoria: localização em primeiro plano ou localização em segundo plano.
- Precisão: a localização precisa ou aproximada.
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 doFusedLocationProvider
, 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ãoACCESS_COARSE_LOCATION
, mas não aACCESS_FINE_LOCATION
. - Exata
- Fornece a estimativa de local do dispositivo mais precisa possível.
Se a estimativa de localização for do
LocationManagerService
ouFusedLocationProvider
, 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ãoACCESS_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.