🚀 7.4 Geolocalização de Precisão com GMS

A geolocalização é um dos recursos mais poderosos do Android. No entanto, o antigo LocationManager consumia muita bateria e era complexo de gerenciar. A Engenharia Premium utiliza o FusedLocationProviderClient do Google Play Services, que escolhe inteligentemente o melhor provedor (GPS, Wi-Fi ou Rede) para você.

Configuração e Permissões

Para obter a localização precisa, declare no AndroidManifest.xml:

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

CAUTION

Permissão em Tempo de Execução: Localização é uma permissão sensível. Você deve solicitá-la em tempo de execução. Se o usuário negar, seu app deve desabilitar as funções de mapa graciosamente.

Implementando o FusedLocation (Java 17)

Esqueça os múltiplos listeners manuais. O FusedLocationProviderClient centraliza tudo:

private FusedLocationProviderClient fusedLocationClient;
 
private void configurarLocalizacao() {
    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
    
    // Verificando permissão antes de solicitar
    if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) == GRANTED) {
        obterUltimaLocalizacao();
    } else {
        locationPermissionLauncher.launch(ACCESS_FINE_LOCATION);
    }
}
 
private void obterUltimaLocalizacao() {
    fusedLocationClient.getLastLocation().addOnSuccessListener(this, location -> {
        if (location != null) {
            atualizarUI(location.getLatitude(), location.getLongitude());
        }
    });
}

Visualização Rápida com Google Static Maps

Para exibir um mapa sem a complexidade do SDK completo, a Google Static Maps API via WebView continua sendo uma excelente opção “vapt-vupt”:

private void carregarMapa(double lat, double lon) {
    var apiKey = "SUA_API_KEY";
    var url = String.format(Locale.US,
        "https://maps.googleapis.com/maps/api/staticmap?center=%f,%f&zoom=15&size=600x300&markers=color:red|%f,%f&key=%s",
        lat, lon, lat, lon, apiKey);
    
    binding.webViewMapa.loadUrl(url);
}

IMPORTANT

Prioridade de Localização: Com o FusedLocation, você define a intenção:

  • PRIORITY_HIGH_ACCURACY: Usa GPS (mais bateria, mais precisão).
  • PRIORITY_BALANCED_POWER_ACCURACY: Usa Wi-Fi/Rede (precisão de quarteirão, pouca bateria).

TIP

No Java 17, utilize String.format(Locale.US, ...) ao montar URLs de coordenadas para garantir que o separador decimal seja sempre o ponto (.), evitando erros de latitude/longitude em dispositivos configurados para Português.


⬅️ Capítulo Anterior | Próximo Capítulo ➡️