我正在构建一个React Native应用,并尝试使用navigator.geolocation获取当前的地理编码。这向我显示了位置请求超时错误。基本上,我正在构建一个跟踪应用,我需要配置确切的位置经度。要开始跟踪,有一个按钮,单击该跟踪即会开始,它应该是跟踪的初始点。我正在使用默认的React Native地理位置API,链接https://facebook.github.io/react-native/docs/geolocation 获取我当前位置的功能::
getLocation() {
navigator.geolocation.getCurrentPosition(response => {
console.log(response);
if (response && response.coords) {
this.saveLogs(response.coords);
}
},
(error) => {
this.onGeolocationErrorOccurCallback(error);
},
GeolocationOptions
)
}
它告诉我一个错误::
{“超时”:3,“ POSITION_UNAVAILABLE”:2,“ PERMISSION_DENIED”:1,“消息”:“位置 请求超时”,“代码”:3}
我已经添加了对Android设备的许可,还通过将enableHighAccuracy值设置为false进行检查。但这对我不起作用。而且我需要将enableHighAccuracy设置为true,因为我想要精确的地理编码来跟踪某人。请说明为什么位置请求超时在这里发生?
答案 0 :(得分:1)
以下代码对我有用:
componentDidMount(){
if(Platform.OS === 'android'){
this.requestLocationPermission()
}else{
this._getCurrentLocation()
}
}
async requestLocationPermission() {
try {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
{
'title': 'Location Permission',
'message': 'MyMapApp needs access to your location'
}
)
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
this._getCurrentLocation()
console.log("Location permission granted")
} else {
console.log("Location permission denied")
}
} catch (err) {
console.warn(err)
}
}
_getCurrentLocation = () =>{
navigator.geolocation.getCurrentPosition(
(position) => {
this.setState({
latitude: position.coords.latitude,
longitude: position.coords.longitude,
})
},
(error) => {
this.setState({ error: error.message })},
{ enableHighAccuracy: true, timeout: 200000, maximumAge: 1000 },
);
}
清单文件中的权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
只需确保启用了您的位置即可。
答案 1 :(得分:1)
尝试使用:
<块引用>启用高准确度:假
为我工作!
const getUserCurrentLocation = () => {
let latitude, longitude
Geolocation.getCurrentPosition(
info => {
const { coords } = info
latitude = coords.latitude
longitude = coords.longitude
setLat(latitude)
setLng(longitude)
getUserCurrentAddress(latitude, longitude)
},
error => console.log(error),
{
enableHighAccuracy: false,
timeout: 2000,
maximumAge: 3600000
}
)
}
答案 2 :(得分:0)
@ react-native-community /地理位置似乎无法正常工作。
您可以按照this issue(在GitHub官方页面上)获得将来的答案。
但是目前,您可以毫无问题地使用react-native-geolocation-service。
答案 3 :(得分:0)
更新:2021 年 6 月 12 日,
这种方法在 Android 模拟器中对我有用。 "react-native": "0.64.1"
和 Android API 30
import Geolocation from "@react-native-community/geolocation";
const getGeoLocaation = () => {
const config = {
enableHighAccuracy: true,
timeout: 2000,
maximumAge: 3600000,
};
Geolocation.getCurrentPosition(
info => console.log("INFO", info),
error => console.log("ERROR", error),
config,
);
};