geolocalização de phonegap sempre falha no tempo limite
Estou usando o sencha-touch 2.0 e o phonegap 2.0.0 no meu aplicativo para recuperar a localização do usuário. Ao correr no meu locahost, tudo funciona muito bem. No entanto, ao carregar o .apk para o dispositivo do meu android 15 api (usando eclipse e o plugin adt), todas as chamadas para getCurrentLocation ou watchPosition nunca retornam ...
aqui está o meu código:
geoOn: function(){
var geoReady = navigator.geolocation || undefined;
var onSuccess = function(position){
Top5.app.alert('Geolocation success '+String(position.coords.latitude) + ' ' + String(position.coords.longitude),'Geolocation');
var scope = Ext.getCmp('nestedList');
scope.updateDistance(position.coords);
};
var onFailure = function(error){Top5.app.alert('Geolocation failed: '+String(error.code) + ' '+String(error.message),'Geolocation');};
if (geoReady) {
this.watchId = navigator.geolocation.watchPosition(onSuccess ,onFailure,{timeout:6000,maximumAge: 3000,enableHighAccuracy: true});
}
else{
Ext.device.Geolocation.watchPosition({
frequency: 3000, // Update every 3 seconds
callback: function(position) {
this.updateDistance(position.coords);
},
failure: function() {
console.log('Geolocation Failure!');
},
scope:this
});
}
},
geoGet: function(){
var geoReady = navigator.geolocation || undefined;
if (geoReady) {
var onSuccess = function(position){
Top5.app.alert('Geolocation successful!!!');
var scope = Ext.getCmp('nestedList');
scope.updateDistance(position.coords);
};
var onFailure = function(error){Top5.app.alert('Geolocation failed: '+String(error.code) + ' '+String(error.message),'Geolocation');};
navigator.geolocation.getCurrentPosition(onSuccess,onFailure);
}
else{}
},
geoOff:function(){
var geoReady = navigator.geolocation || undefined;
if (geoReady) {
navigator.geolocation.clearWatch(this.watchId);
this.watchId = null;
}
else{
Ext.device.Geolocation.clearWatch();
}
},
updateDistance:function(coords){
Top5.app.alert('updateDist','');
var scope = Ext.getCmp('nestedList');
var lat = coords.latitude,lon = coords.longitude;
var store = scope.getStore();
var i,record;
for(i = 0; i < store.data.all.length; i++)
{
record = store.data.all[i];
if(record.data.locationX){
record.set('distance',Top5.app.getDistance(record.data.locationX,record.data.locationY,lat,lon).toFixed(3));
}
}
}
ATUALIZAR: Então eu saí do meu prédio e funcionou ... Eu preciso sair mais vezes.
No entanto, quando eu estou desabilitando o GPS, eu pensei geoLocation vai encontrar a minha localização usando conexão Wi-Fi -, mas ele falha (estou definindo enableHighAccuracy: false). Por que é que?
ATUALIZAR: Deixe-me reformular minha pergunta: O navigator.geolocation.watchPosition supõe que funcione tanto com sinal GPS quanto com sinais wifi / g3? Como posso detectar a localização do usuário usando apenas a conexão com a internet? Atualmente, meu código está funcionando apenas com GPS e, quando essa opção está desativada ou o sinal é bloqueado, a geolocalização não está funcionando.