navigator.geolocation ::位置请求超时问题React Native

时间:2019-01-24 09:01:14

标签: react-native geolocation

我正在构建一个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,因为我想要精确的地理编码来跟踪某人。请说明为什么位置请求超时在这里发生?

4 个答案:

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