wake-up-neo.com

reagieren native navigator.geolocation.getCurrentPosition funktioniert nicht

Ich verwende ein echtes Android-Gerät (Version 5.1)

Ich kann meine Position mithilfe von Reaktiver-Karten bestimmen (korrekte Position des blauen Punkts auf der Karte in meiner App) + Ich kann Google Maps App verwenden und zu meiner Position gehen (GPS funktioniert).

Ich verwende ein großes Zeitlimit, um enableHighAccuracy auf true und false zu setzen, Optionen zu entfernen ... usw. Alle konnten navigator.geolocation nicht abrufen, um Daten abzurufen.

Hier ist mein Code:

var options = {
  enableHighAccuracy: true,
  timeout: 5000,
  maximumAge: 0
};

function success(pos) {
  var crd = pos.coords;

  console.log('Your current position is:');
  console.log(`Latitude : ${crd.latitude}`);
  console.log(`Longitude: ${crd.longitude}`);
  console.log(`More or less ${crd.accuracy} meters.`);
};

function error(err) {
  console.warn(`ERROR(${err.code}): ${err.message}`);
};

navigator.geolocation.getCurrentPosition(success, error, options);

Ich bekomme: ERROR(3): Location request timed out

5
Badis Merabet

Das Entfernen von maximumAge löste das Problem hier! Nur für den Fall, dass jemand dieses Problem im Jahr 2019 noch hat

2
Marlon Englemam

Zwei Dinge. 

1) Das ist eigentlich kein hohes Zeitlimit für eine Antwort mit hoher Genauigkeit, wenn die Koordinaten nicht zwischengespeichert werden 2) Bei einigen Geräten treten Probleme mit der Einstellung "HighAccuracy" auf. 

Versuchen Sie, 30000 ms als Timeout einzustellen, und entfernen Sie die hohe Genauigkeit, bis Sie eine funktionierende Einstellung finden. 

Edit: Ich habe den langen Fehler gefunden, an den ich mich von React Native erinnerte: https://github.com/facebook/react-native/issues/7495

Also probieren Sie das aus:

1) Entfernen Sie die maximumAge-Eigenschaft 2) Wenn dies nicht funktioniert, entfernen Sie den dritten Parameter und verwenden Sie die Standardwerte aus dem nativen Modul. Das heißt, senden Sie das Optionsobjekt nicht. Das sollte funktionieren. 

2
sfratini

Ich habe dies verwendet und es funktioniert einwandfrei: {enableHighAccuracy: false, timeout: 50000}

async watchPosition() {
    console.log('watchPosition');        
    await navigator.geolocation.getCurrentPosition(
        (position) => {
          console.log('Position -> ',position);
        },
        (error) => console.log(error)
        {enableHighAccuracy: false, timeout: 50000}
    );
}
1
Johnmark Hugo

Um den Zugriff auf den Speicherort anzufordern, müssen Sie der AndroidManifest.xml Ihrer App die folgende Zeile hinzufügen: <uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />.

Für ein Android mit API> = 23 benötigen Sie einen zusätzlichen Schritt, um nachzusehen: Sie müssen die ACCESS_FINE_LOCATION-Berechtigung mit der PermissionsAndroid-API anfordern.

PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
      {
        title: "Location Accessing Permission",
        message: "App needs access to your location"
      }
    );

Und erst nach diesem Lauf navigator.geolocation.getCurrentPosition(success, error, options);

0
David