🚀 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.