Ver a última localização conhecida

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 subjacente 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 da 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 o dispositivo é 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.

Manter uma melhor estimativa atual

Você pode esperar que o objeto Location contido na chamada mais recente para getLastLocation() seja o mais preciso. No entanto, como a precisão da localização varia, o valor mais recente não é necessariamente o melhor. É necessário incluir uma lógica para escolher o local a ser exibido com base em vários critérios. O conjunto de critérios também pode variar de acordo com os casos de uso do app e dos resultados do teste de campo.

Para validar a precisão de uma localização retornada de getLastLocation(), conclua as seguintes etapas:

  • Verifique se o local recuperado é significativamente mais recente do que o buscado anteriormente.
  • Verifique se a precisão reivindicada pelo local é melhor ou pior do que a estimativa anterior.
  • Verifique o provedor associado ao novo local. Decida se você confia nesse provedor mais do que o usado no local em cache do seu app.