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
Das Entfernen von maximumAge löste das Problem hier! Nur für den Fall, dass jemand dieses Problem im Jahr 2019 noch hat
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.
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}
);
}
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);