A localização é uma tarefa complicada de fazer, quando você tem uma vida útil da bateria limitada e quando não há sinal de GPS em edifícios e em áreas com muitos edifícios grandes e etc. Mas o Android torna isso muito mais fácil. Ao solicitar um local, você só precisa especificar qual precisão você precisa.
Se você especificar que deseja um accuracy
exemplo *100 meters*
, o Android tentará obter a localização e se puder obter uma localização com precisão de 70 metros, ele retornará para você, mas se o Android puder obter uma localização com precisão superior a 100 metros, seu aplicativo irá aguardar e não receberá nada até que haja um local com essa precisão.
Normalmente, o Android obterá primeiro o Cell ID e depois o enviará para o servidor do Google, que mapeia esses Cell IDs e o servidor retornará uma latitude e longitude com uma precisão baixa para um exemplo de 1000 metros. A esta altura, o Android também tentará ver todas as redes WiFi na área e enviará informações sobre elas também para o servidor do Google e, se possível, o servidor do Google retornará um novo local com maior precisão para um exemplo de 800 metros.
Nesse momento, o GPS estará ligado. O dispositivo GPS precisa de pelo menos 30 segundos de uma inicialização a frio para obter uma posição, então, se puder, ele retornará a latitude e a longitude, mas novamente com uma precisão, que será a maior possível para um exemplo de 100 metros. Quanto mais tempo o GPS funcionar, melhor será a precisão.
Aviso importante: os primeiros dois métodos requerem uma conexão com a Internet. Se não houver conexão de dados, você terá que esperar pelo GPS, mas se o dispositivo estiver em um prédio, provavelmente você não obterá a localização.