我正在使用airbnb's map在我的应用上使用react-native。这个问题适用于Android应用程序,因为我还没有绕过iOS应用程序。
我的问题:
navigator.geolocation在模拟器上运行良好,但在实际设备上运行时间过长,有时会在旧设备上超时。
我注意到了什么:
如果showsUserLocation
道具设为true,我可以在getCurrentPosition结算前的地图上看到原生“当前位置”标记。
我想要的是什么:
showsUserLocation
道具的行为,但似乎一旦watchPostion错误,它就会完全停止。到目前为止,这是我所拥有的,它非常简单:
componentDidMount() {
navigator.geolocation.getCurrentPosition(
(position) => {
console.log("getCurrentPosition Success");
this.setState({
region: {
...this.state.region,
latitude: position.coords.latitude,
longitude: position.coords.longitude,
}
});
this.props.resetNotifications();
this.watchPosition();
},
(error) => {
this.props.displayError("Error dectecting your location");
alert(JSON.stringify(error))
},
{enableHighAccuracy: true, timeout: 20000, maximumAge: 1000}
);
}
watchPosition() {
this.watchID = navigator.geolocation.watchPosition(
(position) => {
console.log("watchPosition Success");
if(this.props.followUser){
this.map.animateToRegion(this.newRegion(position.coords.latitude, position.coords.longitude));
}
},
(error) => {
this.props.displayError("Error dectecting your location");
},
{enableHighAccuracy: true, timeout: 20000, maximumAge: 1000}
);
}
答案 0 :(得分:5)
我总是在不同浏览器之间找到watchPosition
iffy,之前对我有用的一件事就是用getCurrentPosition
内的setInterval
替换它,这样它每隔几秒钟就会得到一个位置,如果它失败一旦它将重试下一个间隔,不像watchPosition
停止观察是否发生错误。
通常浏览器地理定位不是很可靠,您可以查看此主题以解决某些问题https://github.com/facebook/react-native/issues/7495
另一种肯定会更快,也许更可靠的替代方案是使用原生地理定位API。对于公开本地地理定位以反应原生React-native Android geolocation
的库,请检查此问题答案 1 :(得分:0)
不确定这是否可以解决您的问题,但请尝试以下方法:
navigator.geolocation.getCurrentPosition(
(position) => {
console.log("getCurrentPosition Success");
this.setState({
region: {
...this.state.region,
latitude: position.coords.latitude,
longitude: position.coords.longitude,
}
}, () => {
this.props.resetNotifications();
this.watchPosition();
});
},