Получить текущее местоположение мгновенно

Я использую следующий код для запроса текущего местоположения:

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 (если система никогда не находила какого-либо местоположения) или может быть очень старой (если последнее местоположение было несколько дней назад).

Другие вопросы по тегам