Геолокация не прекращается в Phonegap

126
16

Когда я запустил


window.onload = function () {
document.addEventListener("deviceready", getGeolocation);
}

function getGeolocation() {
navigator.geolocation.getCurrentPosition( successCallback, errorCallback, {maximumAge: 0});
}


или


function getGeolocation() {
watchGeoMarkerProcess = navigator.geolocation.watchPosition(updateCallback, errorCallback);
}

а затем


function updateCallback(position) {
if (position.coords.accuracy < 100) {
navigator.geolocation.clearWatch(watchGeoMarkerProcess);
}
}

в моем приложении на iOS 5 с помощью phonegap кажется, что он застрял, поскольку значок индикатора геолокации остается в верхнем баре, и он никогда не исчезает, что я подразумеваю, что GPS не отключается. Кроме того, иногда я вообще не получаю никаких коордов, бросая ошибку тайм-аута.


Я не думаю, что с кодом что-то не так, так как он отлично работает как webapp.


Любые идеи?

спросил(а) 2021-01-25T13:32:04+03:00 4 месяца, 4 недели назад
1
Решение
88

navigator._geo - это реальная реализация, на которую я верю. Я видел, как последние git фиксируют, где они пытаются перетащить navigator.geolocation, но, по-видимому, не работают на iOS. Глядя на исходный код телефона, мне предложили вместо этого использовать реальный вызов.


Вот git commit:
http://mail-archives.apache.org/mod_mbox/incubator-callback-commits/201203.mbox/%3C20120307000809.B82AA5D82@tyr.zones.apache.org%3E


Вот еще один вопрос:
https://groups.google.com/forum/?fromgroups#!topic/phonegap/W32yYpV28W8

ОБНОВЛЕНИЕ: сейчас у меня есть определенный успех:
Измените свой phonegap.js, прокомментируйте строки 3451-3453, которые выглядят следующим образом:
__proxyObj (navigator.geolocation, navigator._geo,...


Вы получите уродливое предупреждение о разрешении. но место должно работать. Причиной этого изменения является то, что теперь вы будете использовать определение местоположения сафари, а не PhoneGaps.


UPDATE2:.. и проблема с PhoneGap оказалась конфликтом с другой библиотекой javascript, в этом случае dragdealer.js. Поэтому дважды проверьте имена подозрительных переменных, такие как "Местоположение" или "Позиция", в любом другом JavaScript, который вы используете. По какой-то причине этот конфликт не был проблемой на платформах, отличных от iOS.

ответил(а) 2021-01-25T13:32:04+03:00 4 месяца, 4 недели назад
64

Для чего это стоит, у меня такая же проблема, и эти исправления не работают. Но они могут для вас:

    убедитесь, что вы получили местоположение после того, как onDeviceReady() был вызван
    попробуйте использовать navigator._geo.getCurrentPosition

ответил(а) 2021-01-25T13:32:04+03:00 4 месяца, 4 недели назад
45

У меня была такая же проблема, хотя на Android.


Добавление опции enableHighAccuracy заставило его начать работу:


navigator.geolocation.getCurrentPosition(onSuccess, onError, {enableHighAccuracy:true} );

ответил(а) 2021-01-25T13:32:04+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема