Phonegap geolocation.watchPosition не обновляет местоположение на iPhone - PullRequest
3 голосов
/ 06 марта 2012

Я разрабатываю приложение для телефонной связи, которое отправляет текущее местоположение GPS на сервер.Для этого у нас есть следующий фрагмент кода:

navigator.geolocation.watchPosition(gpsTracker.onNewCoordinates, gpsTracker.onError, {
    enableHighAccuracy : true,
    maximumAge: 4000, //should be default, just in case
    timeout: 5000
});

Функции обратного вызова заботятся о представлении результатов.На нашем тестовом устройстве Android эта функциональность работает просто замечательно.Однако, когда мы запускаем один и тот же код на устройстве iOS, он обычно ничего не делает, за исключением того, что при приеме GPS все в порядке, он отправляет две координаты, а затем останавливается.

Похоже, что iOS получает некоторую информацию только один раз, иникогда не вызывает функции обратного вызова, когда доступны новые координаты.

Кто-нибудь с подобным опытом / решением этой проблемы?

Ответы [ 2 ]

3 голосов
/ 08 марта 2012

Я решил свою проблему следующим образом.Оказывается, что navigator.geolocation.watchPosition не очень хорошо работает на iOS.Я переписал код, используя javascript setInterval, который вместо этого вызывает getCurrentPosition каждые 5 секунд:

navigator.geolocation.getCurrentPosition( gpsTracker.onNewCoordinates, gpsTracker.onError, {
    enableHighAccuracy : true,
    maximumAge: 4000, // should be default, just in case
    timeout: 5000
});

Теперь позиция GPS корректно возвращается каждые 5 секунд.

0 голосов
/ 22 марта 2012

Посмотрите на это: http://groups.google.com/group/phonegap/browse_thread/thread/58f7ff98170b16c4 Что-то написано о geolocator.start () и stop (), сохраненном для iOS.Может быть, это поможет?

По моему опыту, GPS должен быть "горячим", чтобы доставлять действительные позиции, то есть ему должно быть предоставлено достаточно времени для подключения к спутникам и т. Д. Обычно у вас это "горячо"только если вы начинаете смотреть, а не просто выбираете отдельные позиции.Поэтому в моем HTC значения, полученные getCurrentPositions (), оказались слишком неточными (относящимися к ближнему прицелу, например, в пределах 50 м).Так что это может быть правильный способ еще раз попытаться найти решение с помощью startWatching ().

...