Для определения местоположения вы можете использовать как стандартный
requestLocationUpdate, так и
Fused Location Provider, который является частью api Google play services. Плюсами решения на основе
Fused Location Provider является то, что вам не надо самому подыскивать наиболее точный источник координат, он сделает это за вас. Если запускать его с критериями для определения наиболее точного местоположения, то он будет работать по следующему принципу:
1) Если
GPS доступен и включен, то выбирается
GPS_PROVIDER в качестве источника.
2) Если
GPS недоступен то выбирается
NETWORK_PROVIDER. В данном случаи координаты определяются при помощи вышек сотовой связи и WIFI.
3) Если не того не другого нет то используется
PASSIVE_PROVIDER. Тут система пытается использовать любой способ получить хоть какое-то местоположение в том числе и при использовании акселерометра. Этот провайдер наименее точный.
Так вот
Fused Location Provider включает в себя все три и переключается между ними в зависимости от ситуации для получения наиболее точного место положения, так же при его использовании заряд батареи жрется медленнее. Его главными минусами является то, что для его работы необходим
Google play services и то, что вы не сможете отследить какой именно тип провайдера используется в данный момент.
Что касается стандартного
LocationManager, то вам придется самому определять какой провайдер использовать и переключаться между ними в ручную. В общем все делать ручками. Плюсом является то, что вы полностью контролируете весь процесс.
От себя добавлю что я юзал
Fused Location Provider и работает он просто замечательно, главное чтобы его версия была 7 и выше, на 6 давал сильный разброс по координатам.