2012-11-06 12 views
5

Platforma: iOS6/OSx Lion.Phonegap, Cordova watchposition ogień sukces co 1 sekundę

Próbuję rozwiązać problem, w jaki sposób Phonegap/Cordova współpracuje z navigator.geolocation.watchPosition.

Dokumenty mówią, że opcja "maximumAge" jest tą, która prosi system o odzyskanie pozycji.

Więc z tych opcji:

{ maximumAge: 3000, timeout: 5000, enableHighAccuracy: true } 

I espect wniosek pozycja zostanie zwolniony co 3 sekundy?

I nieważne co maximumAge kładę powodzenie wypala co 1 sekundę ...

Każdy może wyjaśnić, proszę?

Dzięki Bye
Rob

+0

ten sam numer tutaj. Cordova 2.2 i iOS 5.1/iOS6. iOS uruchamia się co sekundę, Android wydaje się robić to co 30, ale nie jest całkiem niezawodny. – scald

+0

Cześć nickhar, więc nie działa również w systemie Android? To naprawdę dziwne, że myślałem, że używam złych parametrów, w poprzednich wersjach Cordova/Phonegapp był parametr "częstotliwości". Dzięki Ciao Rob – oudoken

Odpowiedz

5

Obecnie pracuję wokół tego problemu za pomocą getCurrentPosition z setInterval. Nie jestem pewien, jakie mogą być konsekwencje, ale wydaje mi się, że mam największą kontrolę i wydaje się najbardziej spójną metodą na różnych platformach.

// call this once 
setupWatch(3000); 

// sets up the interval at the specified frequency 
function setupWatch(freq) { 
    // global var here so it can be cleared on logout (or whenever). 
    activeWatch = setInterval(watchLocation, freq); 
} 

// this is what gets called on the interval. 
function watchLocation() { 
    var gcp = navigator.geolocation.getCurrentPosition(
      updateUserLoc, onLocationError, { 
       enableHighAccuracy: true 
      }); 


    // console.log(gcp); 

} 

// do something with the results 

function updateUserLoc(position) { 


var location = { 
    lat : position.coords.latitude, 
    lng : position.coords.longitude 
}; 

console.log(location.lat); 
console.log(location.lng); 
} 

// stop watching 

function logout() { 
    clearInterval(activeWatch); 
} 
+0

Hi Scald, Dzięki za odpowiedź. W rzeczywistości wydaje się, że funkcja watchPosition to tylko połączenie (z timerem), aby uzyskaćCurrentPosition (zajrzałem do wnętrza cordova.js). Btw Twój kod jest bardzo pomocny! Kiedy zatrzymasz timer za pomocą "clearInterval (activeWatch)", zatrzymasz również "watchPosition"? Mam na myśli, jeśli zadzwonić wiele razy "setupWatch" może będzie wiele timerów z "watchPosition"? Wielkie dzięki Ciao Rob – oudoken

+0

Rob - w moim kodzie nie ma pozycji watchPosition. Rozumiem, że gdzieś pod powierzchnią cordova może robić coś podobnego, ale działa to dla mnie o wiele lepiej niż ich wezwanie "watchPosition". Tak, wywołanie 'clearInterval' zatrzymuje' watchLocation' i czyści ten timer tak, aby kolejne wywołania 'setupWatch' mogły utworzyć nowy timer. – scald

+0

Hi Scald, Dzięki spróbuję Twój kod Jestem pewien, że to cordova.js ma pewne problemy z iOS. Wielkie dzięki! Ciao Rob – oudoken

Powiązane problemy