关注React Native AirBnb的MapView上的用户位置

我在我的app上使用airbnb的地图作为react-native。 这个问题是为Android应用程序,因为我还没有解决iOS应用程序。

我的问题:

navigator.geolocation在模拟器上工作正常,但在真实设备上花费太长时间,以至于有时在较旧的设备上超时。

我注意到了什么:

如果showsUserLocation prop设置为true,则可以在getCurrentPositionparsing之前在地图上看到本机“当前位置”标记。

我想要的是:

  1. 我希望我的区域始终以用户的位置为中心。
  2. 我想要一种方法来访问本地的地理位置api(应该更快?),或者也许有人告诉我我做错了什么。 以下是一个代码示例。
  3. 即使在打开/closures位置服务之后,我仍然能够检测到用户的位置。 这是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} ); } 

Solutions Collecting From Web of "关注React Native AirBnb的MapView上的用户位置"

我一直在不同的浏览器之间发现watchPosition ,有一件事情我以前用getCurrentPosition代替了setInterval所以它每隔几秒就会得到一个位置,如果它一旦失败,它会重试下一个时间间隔,不像watchPosition那样停止观看是否有错误发生。

一般浏览器的地理位置不是很可靠,你可以检查这个线程的一些问题https://github.com/facebook/react-native/issues/7495

另外一种更快,更可靠的方法是使用本地地理定位API。 检查这个问题的库,揭示本地地理位置的反应原生React本地Android地理位置

不知道这是否会解决您的问题,但尝试这一点:

 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(); }); },