Usando as APIs de localização do Google Play Services, seu app pode solicitar a última localização conhecida do dispositivo do usuário. Na maioria dos casos, o que interessa é a localização atual do usuário, que geralmente é equivalente à última localização conhecida do dispositivo.
Use especificamente a API Fused Location Provider para recuperar a última localização conhecida do dispositivo. Essa é uma das APIs de localização do Google Play Services. Ela gerencia a tecnologia de localização e fornece uma API simples para que seja possível especificar requisitos de alto nível, como alta precisão ou baixo consumo de energia. Também otimiza o uso da bateria do dispositivo.
Observação: quando o app está sendo executado em segundo plano, o acesso à localização precisa ser crítico para a funcionalidade principal do app e acompanhado de divulgação adequada aos usuários.
Esta lição mostra como criar uma única solicitação para a localização de um
dispositivo usando o método
getLastLocation()
no provedor de localização combinada.
Configurar o Google Play Services
Para acessar o provedor de localização combinada, o projeto de desenvolvimento do app precisa incluir o Google Play Services. Faça o download do componente da Google Play Services e instale-o via SDK Manager e adicione a biblioteca ao seu projeto. Para ver mais detalhes, consulte o guia sobre configuração do Google Play Services.
Especificar permissões do app
Os apps cujos recursos usam Serviços de localização precisam solicitar permissões de localização, dependendo dos casos de uso desses recursos.
Criar cliente de serviços de localização
No método onCreate()
da sua atividade, crie uma instância do cliente do provedor de localização combinada, conforme mostrado no snippet de código a seguir.
Kotlin
private lateinit var fusedLocationClient: FusedLocationProviderClient override fun onCreate(savedInstanceState: Bundle?) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) }
Java
private FusedLocationProviderClient fusedLocationClient; // .. @Override protected void onCreate(Bundle savedInstanceState) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this); }
Ver a última localização conhecida
Depois de criar o cliente de Serviços de localização,
você poderá ver a última localização conhecida do dispositivo de um usuário. Quando seu app estiver conectado a ele, você poderá usar o método getLastLocation()
do provedor de localização combinada para recuperar a localização do dispositivo. A precisão da localização retornada
por essa chamada é determinada pela configuração de permissão que está no manifesto
do app, conforme descrito no guia sobre como
solicitar permissões de localização.
Para solicitar a última localização conhecida, chame o
método
getLastLocation()
. O snippet de código a seguir ilustra a solicitação e um processamento simples da resposta:
Kotlin
fusedLocationClient.lastLocation .addOnSuccessListener { location : Location? -> // Got last known location. In some rare situations this can be null. }
Java
fusedLocationClient.getLastLocation() .addOnSuccessListener(this, new OnSuccessListener<Location>() { @Override public void onSuccess(Location location) { // Got last known location. In some rare situations this can be null. if (location != null) { // Logic to handle location object } } });
O método
getLastLocation()
retorna uma Task
que pode ser usada para conseguir um objeto
Location
com as coordenadas de latitude e longitude de uma
localização geográfica. O objeto de localização pode ser null
nas seguintes situações:
- A localização está desativada nas configurações do dispositivo. O resultado pode ser
null
, mesmo que a última localização tenha sido recuperada anteriormente, porque a desativação da localização também limpa o cache. - O dispositivo nunca registrou a própria localização, o que acontece quando ele é novo ou quando foi restaurado para as configurações originais.
- A plataforma Google Play Services no dispositivo foi reiniciada, e nenhum cliente ativo do provedor de localização combinada solicitou a localização depois que os serviços foram reiniciados. Para evitar essa situação, crie um novo cliente e solicite atualizações de localização. Para saber mais, consulte Receber atualizações de localização.
Escolher a melhor estimativa de localização
O FusedLocationProviderClient
oferece vários métodos para extrair informações de
localização do dispositivo. Escolha uma das opções abaixo, dependendo do caso de uso do
app:
getLastLocation()
recebe uma estimativa de localização mais rapidamente e minimiza o uso da bateria que pode ser atribuído ao app. No entanto, as informações de localização podem estar desatualizadas se nenhum outro cliente tiver usado a localização recentemente.getCurrentLocation()
recebe uma localização mais atualizada e precisa de forma mais consistente. No entanto, esse método pode fazer com que a computação ativa de localização ocorra no dispositivo.Essa é a maneira recomendada para receber uma nova localização sempre que possível, além de ser mais segura do que alternativas como inicializar e gerenciar atualizações de localização por conta própria usando o método
requestLocationUpdates()
. Quando o app chama o métodorequestLocationUpdates()
, às vezes ele pode consumir uma grande quantidade de energia caso a localização não esteja disponível ou a solicitação não seja interrompida corretamente após a atualização de local.
Outros recursos
Para mais informações sobre como buscar a localização atual no Android, consulte estes materiais:
Exemplos
- App de exemplo para demonstrar as práticas recomendadas ao buscar a localização atual.