Геолокация не останавливается в Phonegap - PullRequest
7 голосов
/ 16 марта 2012

Когда я запускаю

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 с использованием телефонной щеликажется, что он застрял, поскольку значок индикатора геолокации остается на верхней панели и никогда не исчезает, что, как я понимаю, означает, что GPS не отключается.Кроме того, иногда я вообще не получаю никаких координат, выдавая ошибку времени ожидания.

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

Есть идеи?

Ответы [ 3 ]

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

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, ...

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

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

1 голос
/ 22 марта 2012

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

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

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

Добавление параметра enableHighAccuracy привело к тому, что он начал работать:

navigator.geolocation.getCurrentPosition(onSuccess, onError, {enableHighAccuracy:true} );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...