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: local exato ou localização 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 navegação guiada.
- 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. O app mantém o acesso quando é colocado em segundo plano, como quando o usuário pressiona o botão Home no dispositivo ou desliga a tela do dispositivo.
Além disso, é necessário declarar um tipo de serviço em primeiro plano de
location, conforme mostrado no snippet de código a seguir. 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 seu app solicitar a
ACCESS_COARSE_LOCATION permissão ou a ACCESS_FINE_LOCATION
permissão, 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 é a mesma que a 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
ACCESS_BACKGROUND_LOCATION permissão no manifesto do app para
solicitar acesso à localização em segundo plano durante o 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>
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 vier do
LocationManagerServiceou 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 ela vier do
LocationManagerServiceou doFusedLocationProvider, essa estimativa geralmente vai ficar dentro de 50 metros, às vezes chegando 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 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 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 acesse 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 Getting to know the
behaviors of your SDK dependencies (em inglês) 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 das permissões de localização.