O segundo Visualização do Desenvolvedor do Android 11 já está disponível, teste e compartilhe seu feedback.

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 você possa especificar requisitos em alto nível, como alta precisão ou baixo consumo de energia. Também otimiza o uso da bateria do dispositivo.

Observação: no Android 8.0 (API de nível 26) e versões posteriores, se um app estiver sendo executado em segundo plano quando solicitar a localização atual, o dispositivo calculará a localização apenas algumas vezes por hora. Para saber como adaptar seu app a esses limites de cálculo, consulte Limites da localização em segundo plano.

Esta lição mostra como criar uma única solicitação da localização de um dispositivo usando o método getLastLocation() na Fused Location Provider.

Configurar o Google Play Services

Para acessar a Fused Location Provider, o projeto de desenvolvimento do aplicativo 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 mais detalhes, consulte o guia sobre configuração do Google Play Services.

Especificar permissões do app

É necessário que os apps de serviços de localização solicitem permissão de localização. O Android oferece as seguintes permissões de localização:

Para acessar a localização do dispositivo, solicite ACCESS_COARSE_LOCATION ou ACCESS_FINE_LOCATION. A permissão escolhida determina a precisão da localização retornada pela API. Se você especificar ACCESS_COARSE_LOCATION, a API retornará uma localização com precisão equivalente a um quarteirão.

Se seu app for destinado ao Android 10 (API de nível 29) ou versões posteriores e precisar acessar a localização do dispositivo enquanto estiver em segundo plano, ele também precisará declarar a permissão ACCESS_BACKGROUND_LOCATION. Para saber mais, consulte o guia sobre como receber atualizações periódicas de localização.

Esta lição requer apenas uma localização aproximada. Solicite essa permissão com o elemento uses-permission no manifesto do seu app, como mostra o seguinte snippet de código:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.google.android.gms.location.sample.basiclocationsample" >

      <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    </manifest>
    

Criar cliente de serviços de localização

No método onCreate() da sua atividade, crie uma instância do cliente da API Fused Location Provider, como 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() da Fused Location Provider 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 na seção Especificar permissões do app deste documento.

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 ver 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 de fábrica.
  • A plataforma Google Play Services no dispositivo foi reiniciada e nenhum cliente ativo da API Fused Location Provider 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 periódicas de localização.