La geolocalización de phonegap siempre falla en el tiempo de espera

Estoy usando sencha-touch 2.0 y phonegap 2.0.0 en mi aplicación para recuperar la ubicación del usuario. Cuando corro en mi locahost, todo funciona bien. Sin embargo, al cargar .apk en el dispositivo de mi Android 15 api (utilizando eclipse y el complemento adt), cada llamada a getCurrentLocation o watchPosition nunca regresa ...

Aquí está mi 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));
         }   
     }
}

ACTUALIZAR: Así que salí de mi edificio y funcionó ... Necesito salir más a menudo.
Sin embargo, cuando deshabilito el gps, pensé que geoLocation encontrará mi ubicación mediante una conexión wifi, pero es un error (estoy configurando enableHighAccuracy: false). ¿Porqué es eso?

ACTUALIZAR: Permítanme reformular mi pregunta: ¿se supone que navigator.geolocation.watchPosition funciona tanto con la señal GPS como con las señales wifi / g3? ¿Cómo puedo detectar la ubicación del usuario utilizando solo la conexión a Internet? actualmente, mi código solo funciona con GPS, y cuando esa opción está deshabilitada o la señal está bloqueada, la geolocalización no funciona.

Respuestas a la pregunta(11)

Su respuesta a la pregunta