Die Geolokalisierung von Phonegap schlägt bei Timeout immer fehl

Ich verwende Sencha-Touch 2.0 und Phonegap 2.0.0 in meiner App, um den Standort des Benutzers abzurufen. Wenn ich auf meinem locahost renne, funktioniert alles einwandfrei. Beim Laden der APK-Datei auf das Gerät meines Android 15 API (mit Eclipse und dem ADT-Plugin) wird jedoch jeder Aufruf von getCurrentLocation oder watchPosition nie zurückgegeben ...

Hier ist mein Code:

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));
         }   
     }
}

AKTUALISIEREN: Also habe ich mein Gebäude verlassen und es hat funktioniert ... ich muss öfter raus.
Wenn ich jedoch das GPS deaktiviere, dachte ich, dass geoLocation meinen Standort über eine WLAN-Verbindung finden wird - aber es schlägt fehl (ich setze enableHighAccuracy: false). Warum das?

AKTUALISIEREN: Lassen Sie mich meine Frage umformulieren: Nimmt navigator.geolocation.watchPosition an, sowohl mit GPS-Signalen als auch mit Wifi / G3-Signalen zu arbeiten? Wie kann ich einen Benutzerstandort nur über eine Internetverbindung erkennen? Derzeit funktioniert mein Code nur mit GPS. Wenn diese Option deaktiviert oder das Signal blockiert ist, funktioniert die Geolokalisierung nicht.

Antworten auf die Frage(11)

Ihre Antwort auf die Frage