我使用的是真正的Android设备(版本5.1)
我可以使用react-native-maps确定我的位置(在我的应用程序内的地图上正确的蓝点位置)+我可以使用谷歌地图应用程序并转到我的位置(GPS工作)。
我正在使用大超时,将enableHighAccuracy切换为true和false,删除选项等。所有人都没能得到navigator.geolocation来获取数据。
这是我的代码:
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);
我得到:ERROR(3): Location request timed out
答案 0 :(得分:6)
我知道为时已晚,但是它可以帮助其他人。
地理位置已从react native .60版本中提取。如果您需要替代解决方案
安装react-native-community / geolocation:
npm install @react-native-community/geolocation --save
react-native link @react-native-community/geolocation
然后,要请求访问位置,您需要将以下行添加到应用的AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
用法:
import Geolocation from '@react-native-community/geolocation';
Geolocation.getCurrentPosition(info => console.log(info));
答案 1 :(得分:5)
两件事。
1)如果没有缓存坐标,那实际上不是高精度响应的高超时 2)某些设备的高精度设置存在问题。
尝试将30000毫秒作为超时并删除高精度,直到找到一个有效的设置。
编辑:我发现了我记得React Native的长虫:https://github.com/facebook/react-native/issues/7495
所以,试试这个:
1)删除maximumAge属性 2)如果不起作用,请删除第三个参数并使用本机模块中的默认值。意思是,不要发送选项对象。这应该工作。
答案 2 :(得分:2)
删除maximumAge在这里解决了这个问题!万一有人在2019年仍然遇到这个问题
答案 3 :(得分:1)
我使用了它,并且效果很好: {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}
);
}
答案 4 :(得分:1)
要请求访问位置,您需要在应用的AndroidManifest.xml中添加以下行:<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
。
对于具有 API> = 23 的Android,您需要执行其他步骤进行检查:您需要使用ACCESS_FINE_LOCATION
API来请求PermissionsAndroid
权限。< / p>
PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
{
title: "Location Accessing Permission",
message: "App needs access to your location"
}
);
并且只有在此之后运行navigator.geolocation.getCurrentPosition(success, error, options);