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, 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 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 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é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:

Exemplos

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