2012-03-16 2 views
7

Quando eseguoGeolocalizzazione non si ferma in PhoneGap

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

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

o

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

e poi

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

nella mia app su iOS 5 utilizzando PhoneGap sembra rimanere bloccati, poiché l'icona-indicatore di geolocalizzazione rimane nella barra in alto e non scompare mai, cosa che intendo dire che il GPS non si spegne. Inoltre, a volte non ottengo alcun rapporto, causando un errore di timeout.

Non penso che ci sia qualcosa di sbagliato nel codice dato che funziona come una webapp.

Qualche idea?

+0

FYI, questo sembra essere un non-problema in ultima Cordova (FTW). Funziona bene per me ora usando 'ondeviceready' e' watchPosition' + 'clearWatch'. – jenswirf

risposta

3

navigator._geo è l'implementazione 'reale' Credo. Ho visto recenti git commit in cui stanno cercando di scavalcare navigator.geolocation ma apparentemente fallendo su iOS. Guardando il codice sorgente di PhoneGap mi è venuta l'idea di provare invece la vera chiamata.

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

Ecco un altro thread sul problema: https://groups.google.com/forum/?fromgroups#!topic/phonegap/W32yYpV28W8

UPDATE: ho qualche misura di successo ora: Modifica i tuoi phonegap.js, commentare linee 3451-3453, che simile a questa: __proxyObj (navigator.geolocation, navigator._geo, ...

otterrete un avviso permesso brutta .. ma la posizione dovrebbe funzionare il ragionamento dietro questo. il cambiamento è che ora utilizzerai il rilevamento della posizione di Safari, non PhoneGaps.

UPDATE2: ..e il problema con PhoneGap si è rivelato un conflitto con un'altra libreria javascript, in questo caso dragdealer.js. Quindi ricontrolla eventuali nomi di variabili sospette come "Posizione" o "Posizione" in qualsiasi altro javascript che stai utilizzando. Per qualche ragione questo conflitto non era un problema su piattaforme diverse da iOS.

+0

questo dovrebbe essere in risposta a wije qui sotto. – Ryan

+0

Grazie per aver dato un'occhiata.Peccato che abbia portato a un altro grosso problema, il che significa che non posso davvero usarlo. Per quanto riguarda i conflitti JS, questo è un problema per me almeno dal momento che non sto usando nessuna libreria. – jenswirf

1

Per quello che vale ho lo stesso problema e queste correzioni non hanno funzionato. Ma possono per voi:

  • assicuratevi di avere la posizione dopo onDeviceReady() è stato chiamato
  • provare a utilizzare navigator._geo.getCurrentPosition
+0

C'è ancora dell'altro in questa soluzione 'navigator._geo.getCurrentPosition'? Questo sembra essere un metodo personalizzato che non ho .. – jenswirf

0

Ho avuto lo stesso problema, anche se su Android.

Aggiunta l'opzione enableHighAccuracy causato è di iniziare a lavorare:

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