我有一个奇怪的行为,无法找到解决方案.在我的React Native应用程序中,我使用navigator.geolocation来确定当前位置.我的应用程序与Facebook的地理位置代码中的示例几乎完全相同.
在模拟器中我的应用程序运行完美,但是当我将它部署到我的iphone时,返回的位置(通过getCurrentPosition和watchPosition)不正确.例如,速度和航向为-1,精度为65.经度和纬度似乎是有效的,但不是我的实际位置(在另一个国家).
无论我是通过调试还是发布将应用程序部署到iphone,它总是会做出同样的反应.
但是,如果我以TomTom开始并将此应用程序放在后台,然后启动我的GeolocationExample应用程序,那么一切正常.
我创建的应用程序如下:
react-native init GeolocationExample
import React,{ Component } from 'react'; import { AppRegistry,StyleSheet,Text,View } from 'react-native'; export default class GeolocationExample extends React.Component { state = { initialPosition: 'unknown',lastPosition: 'unknown',}; watchID: ?number = null; componentDidMount() { navigator.geolocation.getCurrentPosition( (position) => { var initialPosition = JSON.stringify(position); this.setState({initialPosition}); },(error) => alert(JSON.stringify(error)),{enableHighAccuracy: true,timeout: 20000,maximumAge: 1000} ); this.watchID = navigator.geolocation.watchPosition((position) => { var lastPosition = JSON.stringify(position); this.setState({lastPosition}); }); } componentWillUnmount() { navigator.geolocation.clearWatch(this.watchID); } render() { return ( <View style={styles.main}> <Text> <Text style={styles.title}>Initial position: </Text> {this.state.initialPosition} </Text> <Text> <Text style={styles.title}>Current position: </Text> {this.state.lastPosition} </Text> </View> ); } } var styles = StyleSheet.create({ main: { margin: 30 },title: { fontWeight: '500',},}); AppRegistry.registerComponent('GeolocationExample',() => GeolocationExample);
解决方法
(第一个选项)添加参数{enableHighAccuracy:true,timeout:20000,maximumAge:1000,precision:10 //十米不在文档中} (第2选项)设定第28行 #define RCT_DEFAULT_LOCATION_ACCURACY kCLLocationAccuracyBest //默认为kCLLocationAccuracyHundredMeters