2012-03-16 23 views
7

Kiedy biegnęGeolokalizacja nie zatrzymuje w PhoneGap

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

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

lub

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

a następnie

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

w mojej aplikacji na iOS 5 za pomocą PhoneGap wydaje utknąć, ponieważ ikona wskaźnika geolokalizacji pozostaje na górnym pasku i nigdy nie znika, co mam na myśli GPS nie jest wyłączony. Ponadto czasami nie otrzymuję żadnych współrzędnych, powodując błąd przekroczenia limitu czasu.

Nie sądzę, że kod jest nieprawidłowy, ponieważ działa dobrze jako aplikacja internetowa.

Wszelkie pomysły?

+0

FYI, to wydaje się, że nie problem w najnowszej Cordova (FTW). Działa dobrze dla mnie teraz używając 'ondeviceready' i' watchPosition' + 'clearWatch'. – jenswirf

Odpowiedz

3

navigator._geo jest „prawdziwe” realizacja Wierzę. Widziałem ostatnio git commits, gdzie próbują przejechać nawigator.geolocation, ale najwyraźniej awarii na iOS. Spojrzenie na kod źródłowy phonegap dało mi pomysł, aby zamiast tego spróbować prawdziwego połączenia.

Oto git commit: http://mail-archives.apache.org/mod_mbox/incubator-callback-commits/201203.mbox/%[email protected]%3E

Oto kolejny wątek na ten problem: https://groups.google.com/forum/?fromgroups#!topic/phonegap/W32yYpV28W8

UPDATE: Mam pewną miarą sukcesu now: zmieniać swoich phonegap.js, skomentuj linie 3451-3453, które wyglądają tak: __proxyObj (navigator.geolocation, navigator._geo, ...

Otrzymasz brzydki alert uprawnień .. ale lokalizacja powinna zadziałać. Zmiana polega na tym, że użyjesz wykrywania lokalizacji w Safari, a nie PhoneGaps.

UPDATE2: ..i problem z PhoneGap okazał się konfliktem z inną biblioteką javascript, w tym przypadku dragdealer.js. Więc sprawdź dokładnie pod kątem podejrzanych nazw zmiennych, takich jak "Lokalizacja" lub "Pozycja" w dowolnym innym javascriptu, którego używasz. Z jakiegoś powodu ten konflikt nie był problemem na platformach innych niż iOS.

+0

to ma być odpowiedź na wije poniżej. – Ryan

+0

Dzięki za spojrzenie.Szkoda, że ​​doprowadziło to do kolejnego dużego problemu, co oznacza, że ​​nie mogę go naprawdę wykorzystać. Jeśli chodzi o konflikty JS, to nie jest to dla mnie problem, przynajmniej dlatego, że w ogóle nie używam żadnych bibliotek. – jenswirf

1

Co jest warte, mam ten sam problem i te poprawki nie zadziałały. Ale może dla ciebie:

  • upewnić się lokalizację po onDeviceReady() została wywołana
  • spróbuj navigator._geo.getCurrentPosition
+0

Czy w rozwiązaniu 'navigator._geo.getCurrentPosition' było coś więcej? To wydaje się być jakąś niestandardową metodą, której nie mam .. – jenswirf

0

Miałem ten sam problem, chociaż na Androida.

Dodanie opcji enableHighAccuracy spowodował, że do rozpoczęcia pracy:

navigator.geolocation.getCurrentPosition(onSuccess, onError, {enableHighAccuracy:true}); 
Powiązane problemy