Conferir o último local conhecido

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, você quer saber a localização atual do usuário, que geralmente é equivalente ao último local conhecido do dispositivo.

Especificamente, use o provedor de localização combinada para recuperar o último local conhecido do dispositivo. O provedor de localização combinada é uma das APIs Location no Google Play Services. Ele gerencia a tecnologia de localização subjacente e fornece uma API para que você possa especificar requisitos em um nível alto, como alta precisão ou baixo consumo de energia. Também otimiza o uso da bateria do dispositivo.

Nesta lição, mostramos como fazer uma única solicitação para o local 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 e instale o componente do Google Play Services pelo SDK Manager e adicione a biblioteca ao seu projeto. Para mais detalhes, consulte o guia para configurar o Google Play Services.

Especificar permissões do app

Os apps que usam os 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 atividade, crie uma instância do cliente do provedor de localização combinada, conforme mostrado no snippet de código abaixo.

private lateinit var fusedLocationClient: FusedLocationProviderClient

override fun onCreate(savedInstanceState: Bundle?) {
    // ...

    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
}

Ver a última localização conhecida

Depois de criar o cliente dos Serviços de localização, você pode acessar o último local conhecido do dispositivo de um usuário. Use o método getLastLocation() do provedor de localização combinada para recuperar a localização do dispositivo. A precisão do local retornado por essa chamada é determinada pela configuração de permissão que você coloca no manifesto do app, conforme descrito no guia sobre como solicitar permissões de localização.

Para solicitar o último local conhecido, chame o método getLastLocation(). O snippet de código a seguir ilustra a solicitação e o processamento básico da resposta:

fusedLocationClient.lastLocation
    .addOnSuccessListener { location: Location? ->
        // Got last known location. In some rare situations this can be null.
    }

O método getLastLocation() retorna um Task que pode ser usado para receber 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 o último local tenha sido recuperado anteriormente, porque a desativação do local também limpa o cache.
  • O dispositivo nunca registrou a localização, o que pode ser o caso de um dispositivo novo ou que foi restaurado para as configurações originais.
  • O Google Play Services no dispositivo foi reiniciado, e não há um cliente ativo do provedor de localização combinada que tenha solicitado a localização após a reinicialização dos serviços. Para evitar essa situação, crie um novo cliente e solicite atualizações do local por conta própria. Para mais informações, consulte Solicitar atualizações do local.

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 local mais rapidamente e minimiza o uso da bateria que pode ser atribuído ao seu app. No entanto, as informações de localização podem estar desatualizadas se nenhum outro cliente tiver usado a localização recentemente.
  • getCurrentLocation() recebe um local mais recente e preciso com mais consistência. No entanto, esse método pode fazer com que o cálculo de localização ativa 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étodo requestLocationUpdates(), à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:

Amostras

  • App de exemplo para demonstrar as práticas recomendadas ao buscar a localização atual.