it-swarm.com.de

navigator.geolocation.getCurrentPosition funktioniert nicht auf Android google chrome

Dieser Code:

navigator.geolocation.getCurrentPosition(
                    function(position) {
                        alert(position.coords.latitude, position.coords.longitude);
                    },
                    function(error){
                        alert(error.message);
                    }, {
                        enableHighAccuracy: true
                        ,timeout : 5000
                    }
            );

https://jsfiddle.net/FcRpM/ funktioniert in Google Chrome auf meinem Laptop, aber auf dem mobilen HTC one S (Android 4.1, GPS aus, Ortung über Handy) Netzwerke und WiFi aktiviert), über WiFi mit dem Internet verbunden.

  1. Der Standardbrowser funktioniert einwandfrei.
  2. Google Chrome, Opera, Yandex.browser für Android scheitert mit "Timeout abgelaufen".

andere Android Apps orten mich richtig.

32
Andrey Koltsov

Sie können dies versuchen. Es scheint auf meinem Gerät zu funktionieren (Samsung Galaxy Nexus läuft Chrome 27.0.1453.90 auf Wi-Fi (keine Datenverbindung, kein GPS an))

navigator.geolocation.getCurrentPosition(
    function(position) {
         alert("Lat: " + position.coords.latitude + "\nLon: " + position.coords.longitude);
    },
    function(error){
         alert(error.message);
    }, {
         enableHighAccuracy: true
              ,timeout : 5000
    }
);

Das Problem ist, dass die Warnung nur Zeichenfolgen akzeptiert (in der ursprünglichen Form), Sie jedoch 2 Doppelte übergeben. Ändern Sie das Warnungsfeld zum Beispiel auf alert('Hey', 'Hello'); und die Ausgabe wird nur Hey sein. Ändern Sie den , In + Und Sie erhalten die verketteten Zeichenfolgen HeyHello. Sie können im alert kein + - Zeichen verwenden, da die Gleichung zuerst ausgeführt und dann angezeigt wird.

Hoffe das macht es klar.

17
Adrian

ES GIBT IS A WORKAROUND: um den Aufruf von watchPosition zu beenden und in 5 Sekunden zu warten, bevor die watchID gelöscht wird. Code unten;

var options = { enableHighAccuracy: true, maximumAge: 100, timeout: 60000 };
if( navigator.geolocation) {
   var watchID = navigator.geolocation.watchPosition( gotPos, gotErr, options );
   var timeout = setTimeout( function() { navigator.geolocation.clearWatch( watchID ); }, 5000 );
} else {
   gotErr();
}

Ich habe im Moment nicht mit den "Optionen" -Werten oder der Zeitüberschreitungsverzögerung herumgespielt, aber der obige Code liefert auf jeder Plattform, die ich ausprobiert habe, genaue Positionsdaten.

8
delkant

Ich bin gerade mit dem Testen einer Reihe von Mobilgeräten und der Javascript-Geolokalisierung fertig. Ich habe den Beispielcode von Google verwendet, um sicherzustellen, dass das Problem nicht in meinem eigenen Code liegt.

Chrome for Android 4.4 funktioniert anscheinend nicht mit GPS-Ortungsdiensten und auch nicht mit dem Standardbrowser 2.3. Beide benötigen "Hohe Genauigkeit" - die Verwendung von drahtlosen Netzwerken und 3G/4G-Netzwerken.

Das Lustige ist, dass Firefox für Android funktioniert ohne Probleme nur mit GPS. Nur die gängigen Android Browser (Chrome + Mobile Safari)) schlagen fehl nur mit GPS-Standorteinstellungen.

Und der Rest der Bande - Lumia WP8 mit GPS, Windows und Linux (beide mit ADSL) funktionierte perfekt mit beliebigen Standorteinstellungen.

6
karvonen

Nun, ich bin gestern auf dieses Problem gestoßen und das Problem war, dass die Geolocation-API nur über HTTPS verwendet werden kann. Es wird funktionieren auf http://localhost Für andere Geräte muss jedoch eine sichere Verbindung bestehen.

Ich hoffe es hilft!

2
Ajay Gupta

Nach vielen Stunden der Suche nach einer Lösung für error3 kann ich mein Telefon nur neu starten und die Geolocation beginnt wie gewohnt zu funktionieren. So schlecht...

2
saike

Es funktionierte für mich für jeden Simulator, aber nicht für Android Geräte

was bei mir funktioniert hat war

navigator.geolocation.getCurrentPosition(
                (position) => {
                    console.log(position);
                },
                (error) => console.log(new Date(), error),
                { enableHighAccuracy: false, timeout: 5000},
            );

bedeutet, anstelle von drei Argumenten habe ich nur zwei verwendet

{enableHighAccuracy: false, timeout: 5000}

1
Sultan Ali