Получить текущее местоположение мгновенно
Я использую следующий код для запроса текущего местоположения:
private void RequestCurrentLocation()
{
Criteria locationCriteria = new Criteria () { Accuracy = Accuracy.NoRequirement, PowerRequirement = Power.NoRequirement };
this.mgr = GetSystemService (Context.LocationService) as LocationManager;
String locationProvider = this.mgr.GetBestProvider (locationCriteria, true);
this.mgr.RequestLocationUpdates (locationProvider, 0, 0, this);
}
Как мне нужно местоположение только один раз, поэтому я звоню RemoveUpdates()
как только OnLocationChanged
поднимается и затем продолжает работу:
public void OnLocationChanged (Location location)
{
this.mgr.RemoveUpdates (this);
//Rest of the method
}
Я сталкиваюсь с двумя проблемами:
1) Хотя я предоставил ноль в параметрах расстояния и времени RequestLocationUpdates
но все равно нужно как минимум 2-3 секунды до OnLocationChanged
срабатывает. Как я могу сделать это мгновенно?
2) я периодически сталкиваюсь с проблемой OnLocationChanged
событие не срабатывает вообще. Вчера я потратил целый день, чтобы заставить мой код работать, который работал безупречно днем ранее. Странно, что однажды что-то работает правильно, а на следующий день просто останавливается даже с тем же исходным кодом! Может кто-нибудь дать мне идею?
Благодарю.
1 ответ
Там нет никакого способа получить точное, актуальное местоположение мгновенно.
Чтобы устройство определило местоположение, оно должно отслеживать GPS, WiFi, 3G вышки, и это зависит от мощности радиосигнала, скорости передачи и других подобных мелочей. Вы можете обмануть параметры своего запроса, чтобы попытаться выполнить более быстрое обновление (например, вместо лучшего поставщика, попробуйте использовать любого доступного поставщика).
В качестве альтернативного подхода вы можете запросить getLastKnownLocation, этот метод является синхронным и мгновенно отвечает с последним местоположением, найденным системой. Проблема в том, что "последнее известное местоположение" может быть null
(если система никогда не находила какого-либо местоположения) или может быть очень старой (если последнее местоположение было несколько дней назад).