GPS e serviços de geolocalização em aplicativos móveis são APIs para determinar a localização física de um dispositivo usando satélites, Wi-Fi e redes móveis. De acordo com o Google Android Location Guide (2025), mais de 60% dos aplicativos móveis usam dados de localização para personalizar conteúdo. O Fused Location Provider no Android combina várias fontes para melhorar a precisão e reduzir o consumo de energia.
Principais conclusões
GPS (Global Positioning System) é um sistema de navegação por satélite composto por 31 satélites ativos em órbita a uma altitude de aproximadamente 20.200 km. Em dispositivos móveis, o chip GPS recebe sinais dos satélites e calcula as coordenadas com base na trilateração — medição do tempo de viagem do sinal de vários satélites. Os serviços de geolocalização em sistemas operacionais móveis adicionam dados de pontos de acesso Wi-Fi e torres de celular ao GPS para posicionamento mais rápido (A-GPS) e melhor precisão em ambientes internos. De acordo com o GPS.gov (2024), a precisão do GPS civil é de 3 a 5 metros em condições de céu limpo e de até 15 metros em áreas urbanas densas.
Dispositivos móveis modernos suportam não apenas o sistema GPS americano, mas também outros sistemas globais de navegação por satélite: o GLONASS russo (24 satélites), o Galileo europeu (28 satélites) e o BeiDou chinês. O suporte a múltiplos sistemas simultaneamente melhora a precisão e a velocidade do posicionamento — o dispositivo pode usar até 40 satélites de diferentes sistemas para calcular sua posição. No iOS e Android, a seleção do sistema de satélites é feita automaticamente no nível do chip de hardware, e os desenvolvedores não precisam gerenciar isso.
O processo de determinar a localização em um dispositivo móvel consiste em várias etapas: coleta de dados de fontes (satélites, Wi-Fi, células), filtragem e correção de erros, cálculo de coordenadas e entrega do resultado ao aplicativo. O sistema operacional gerencia esse processo por meio de um serviço de geolocalização unificado que otimiza todas as fontes para economizar bateria. Abaixo estão descritas as três principais fontes de dados de localização.
A navegação por satélite fornece a máxima precisão (3 a 5 metros), mas requer uma visão clara do céu. Em ambientes internos ou áreas urbanas densas, o sinal GPS pode ser enfraquecido ou completamente perdido. O tempo para a primeira fixação (TTFF) é de 30 a 60 segundos para uma inicialização a frio e de 5 a 10 segundos para uma inicialização a quente. O A-GPS (GPS Assistido) acelera a inicialização ao baixar dados de efemérides dos satélites pela internet em vez de esperar os dados dos satélites.
O posicionamento Wi-Fi usa um banco de dados de endereços MAC de pontos de acesso com coordenadas conhecidas. A precisão é de 10 a 50 metros dentro da cobertura Wi-Fi. As torres de celular fornecem precisão de 100 metros a vários quilômetros, dependendo da densidade das torres. A combinação de todas as fontes (Fused Location) permite obter coordenadas com precisão razoável e consumo mínimo de energia — especialmente quando o chip GPS está desligado ou os sinais de satélite não estão disponíveis.
Em ambas as plataformas, os serviços de geolocalização são implementados através de APIs do sistema com diferentes graus de abstração. O Android usa o FusedLocationProviderClient do Google Play Services, o iOS usa o CLLocationManager do Core Location. Ambas as APIs permitem solicitar uma posição única ou assinar atualizações periódicas. Abaixo está um exemplo de obtenção de coordenadas no Android usando o Fused Location Provider em Kotlin.
val fusedClient = LocationServices.getFusedLocationProviderClient(this)
val locationRequest = LocationRequest.Builder(
Priority.PRIORITY_HIGH_ACCURACY
)
.setIntervalMillis(5000)
.setMinUpdateIntervalMillis(2000)
.build()
val locationCallback = object : LocationCallback() {
override fun onLocationResult(result: LocationResult) {
result.lastLocation?.let { location ->
Log.d("Localização", "Lat: ${location.latitude}, Lng: ${location.longitude}")
}
}
}
if (checkLocationPermission()) {
fusedClient.requestLocationUpdates(
locationRequest, locationCallback,
Looper.getMainLooper()
)
}
No exemplo, o LocationRequest é configurado com PRIORITY_HIGH_ACCURACY — isso ativa o GPS para máxima precisão. setIntervalMillis define o intervalo de atualização desejado (5 segundos), setMinUpdateIntervalMillis define o intervalo mínimo (2 segundos). O callback onLocationResult é invocado cada vez que o sistema recebe novas coordenadas. É importante verificar a permissão antes de chamar requestLocationUpdates — caso contrário, o aplicativo travará com uma SecurityException.
import CoreLocation
let locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
// MARCA: - CLLocationManagerDelegate
func locationManager(
_ manager: CLLocationManager,
didUpdateLocations locations: [CLLocation]
) {
guard let location = locations.last else { return }
print("Location: \(location.coordinate.latitude), \(location.coordinate.longitude)")
}
No iOS, desiredAccuracy determina a precisão da solicitação: kCLLocationAccuracyBest usa todas as fontes disponíveis (GPS + Wi-Fi + células). Após solicitar a permissão através de requestWhenInUseAuthorization, o sistema mostra um diálogo ao usuário. O delegado didUpdateLocations recebe uma matriz de objetos CLLocation com coordenadas, altitude, velocidade e direção. Para parar as atualizações, chame stopUpdatingLocation para economizar bateria.
O acesso à geolocalização requer permissão explícita do usuário em ambas as plataformas. No Android, são usadas as permissões ACCESS_FINE_LOCATION (GPS) e ACCESS_COARSE_LOCATION (Wi-Fi/células). A partir do Android 10, o acesso em segundo plano requer uma permissão separada ACCESS_BACKGROUND_LOCATION. No iOS, três níveis estão disponíveis: requestWhenInUseAuthorization (apenas quando o aplicativo está ativo), requestAlwaysAuthorization (em segundo plano) e carimbos de data/hora temporários para posicionamento preciso. A Apple exige uma descrição obrigatória no Info.plist: NSLocationWhenInUseUsageDescription ou NSLocationAlwaysAndWhenInUseUsageDescription. Sem essas chaves, a solicitação de permissão é ignorada.
O uso contínuo do GPS drena significativamente a bateria — até 30% por hora de operação contínua na máxima precisão. Para otimizar o consumo de energia, recomenda-se usar a geolocalização apenas quando necessário e interromper as atualizações quando o aplicativo entrar em segundo plano. No Android, o FusedLocationProviderClient alterna automaticamente entre GPS e fontes de rede dependendo da disponibilidade e prioridade da solicitação. No iOS, use o serviço de mudança significativa de localização (startMonitoringSignificantLocationChanges) para atualizações com consumo mínimo de energia — a precisão é menor (até 500 metros), mas a bateria quase não é gasta. Pratique também o processamento em lote: colete coordenadas em intervalos de 5 a 10 minutos e envie-as ao servidor em uma única solicitação via WorkManager no Android ou BGTaskScheduler no iOS. Reduzir a frequência de solicitações de 1 segundo para 30 segundos reduz o consumo de energia da geolocalização em 85%.
A geolocalização é usada em uma ampla gama de aplicativos móveis: desde navegadores até serviços de entrega. Os cenários mais comuns incluem exibir o usuário no mapa, publicidade geodirecionada, rastreamento de entregadores, geofencing para notificações push e rastreamento de atividade física. Cada cenário requer sua própria abordagem de precisão e frequência de atualização. Abaixo está uma tabela com recomendações de configuração para diferentes tipos de aplicativos.
| Tipo de aplicativo | Precisão | Intervalo | Modo segundo plano |
|---|---|---|---|
| Navegador | HIGH (GPS) | 1-2 seg | Sim |
| Entrega | BALANCED (GPS+Wi-Fi) | 10-30 seg | Sim |
| Clima | LOW (Wi-Fi/células) | Uma vez | Não |
| Rede social | BALANCED | Ao abrir | Não |
| Fitness | HIGH (GPS) | 5-10 seg | Sim |
Ao projetar a funcionalidade de geolocalização, é importante considerar que os usuários podem revogar a permissão a qualquer momento através das configurações do sistema. O aplicativo deve lidar adequadamente com situações em que a geolocalização não está disponível e mostrar uma explicação clara do porquê a funcionalidade está limitada.
Geofencing é uma tecnologia para criar limites virtuais em um mapa. Quando esses limites são cruzados, o aplicativo recebe uma notificação. No Android, as cercas geográficas são implementadas através do GeofencingClient do Google Play Services, no iOS — através do CLCircularRegion do Core Location. Ao entrar ou sair de uma zona, o sistema desperta o aplicativo e envia um evento mesmo se o aplicativo estiver fechado ou minimizado. Isso é usado para notificações push ao se aproximar de uma loja, lembretes de tarefas baseados em localização e automação de dispositivos IoT. O número máximo de cercas geográficas é limitado: 100 no Android, 20 no iOS simultaneamente. O raio mínimo da zona é de 50 metros em ambas as plataformas — caso contrário, o sistema pode não disparar devido a imprecisões na determinação da localização. Ao entrar em uma zona, o sistema inicia um Intent no Android ou chama o delegado locationManager:didEnterRegion no iOS.
Perguntas frequentes
O GPS em um smartphone é um receptor integrado de sinais do sistema de navegação por satélite que determina coordenadas com precisão de 3 a 5 metros. Os dispositivos também suportam GLONASS, Galileo e BeiDou para melhor precisão e velocidade de posicionamento.
GPS é apenas um método por satélite para determinar coordenadas. Os serviços de geolocalização combinam GPS, posicionamento Wi-Fi e dados de torres de celular para uma determinação de localização mais rápida e eficiente em termos energéticos, especialmente em ambientes internos.
Chame requestWhenInUseAuthorization() ou requestAlwaysAuthorization() em uma instância de CLLocationManager. Primeiro, adicione NSLocationWhenInUseUsageDescription ao Info.plist com uma explicação clara do porquê a geolocalização é necessária.
Use FusedLocationProviderClient no Android e o serviço de mudança significativa de localização no iOS. Aumente o intervalo entre solicitações para 10 a 30 segundos, desative as atualizações quando a tela estiver desligada e aplique o envio em lote de coordenadas ao servidor.
Sim, sem GPS você pode determinar a localização aproximada usando pontos de acesso Wi-Fi (precisão de 10 a 50 metros) ou torres de celular (precisão de 100 a 5000 metros). No Android, ACCESS_COARSE_LOCATION é usado para isso.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também