React Native Geolocation 在 IOS 上无法正常工作

Posted

技术标签:

【中文标题】React Native Geolocation 在 IOS 上无法正常工作【英文标题】:React Native Geolocation is not working properly on IOS 【发布时间】:2019-06-21 03:07:32 【问题描述】:

我在 React-Native 中使用 Geolocation 来接收我当前的位置以加载我周围的对象。下面是我的代码。

getCurrentPosition() 
    console.log("checkLocation", "getCurrentPosition1");
    navigator.geolocation.getCurrentPosition(
      position => 
        const  coords  = position;
        if (coords !== undefined) 
          console.log("checkLocation", "getCurrentPosition trigger");
          this.setState(
            currentCoordinate: coords,
            prevCoorForGet: coords,
            prevCoorForUpdate: coords
          );
          this.props.saveCurrentLocation(
            currentLocation: 
              latitude: coords.latitude,
              longitude: coords.longitude
            
          );
          this.loadContent(coords);
        
      ,
      error =>
        console.log(
          "checkLocation",
          "getCurrentPosition " + JSON.stringify(error)
        ),
      
        enableHighAccuracy: true,
        timeout: 60000,
        maximumAge: 3600000
      
    ); 
 

问题是这段代码第一次运行良好。但是当我导航到另一个场景并返回时,它不再起作用并给我一个超时错误。有时有效,有时无效。请帮我解决它。

【问题讨论】:

你有什么解决办法??? @AshishSinghRawat 我的解决方案是使用enableHighAccuracy = false 重新调用getCurrentLocation,如果它在第一次超时失败时使用enableHighAccuracy = true。无论如何,这仍然不是一个好的解决方案 【参考方案1】:

即使在页面之间导航并返回地图屏幕之后,这个在我的项目中也能正常工作(iosandroid)。

navigator.geolocation.getCurrentPosition(
        (position) => 
            // user location's latitude and longitude
            let latitude = parseFloat(position.coords.latitude);
            let longitude = parseFloat(position.coords.longitude);

            console.log('location position: ', position);

            let region = 
                latitude: latitude,
                longitude: longitude,
                latitudeDelta: 0.0522,
                longitudeDelta: 0.0321,
            ;

            // to store region data
            this.setState(region: region);

            //animate to user current location
            this.map.animateToRegion(region,1000)


        ,
        (error) => console.log('position error!!!', error),
        enableHighAccuracy: false, timeout: 3000
    );

我希望它也适用于您的项目

编辑

如果还是不行

    /**
     * when return the page this listener will trigger
     */
    this.props.navigation.addListener('willFocus', (payload) => 

        // call location method again
        this.getLocation()

    );

【讨论】:

感谢评论,超时错误非常随机。有时它像魅力一样起作用,但有时需要很长时间才能获得。我客人可能是因为enableHighAccuracy 设置为trueFalse 正在工作,但我害怕这个。【参考方案2】:

试试下面的代码,这似乎对我有用

import Geolocation from 'react-native-geolocation-service';

componentWillUnmount() 
    Geolocation.stopObserving();

【讨论】:

我会尝试并尽快回复您。谢谢你!【参考方案3】:

在 componentWillMount() 中使用你的函数,这样每次组件挂载时......它的函数都会被执行

【讨论】:

这不是我问题的答案。我在getCurrentPosition 中遇到了超时错误。

以上是关于React Native Geolocation 在 IOS 上无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

仅在 iOS 上没有弹出询问权限,未确定权限,react-native-community/geolocation

使用 geolocation react-native 时出错

react-native-geolocation-service 在调试模式下正常工作,但在发布模式下不工作

当我使用 react-native-geolocation-service 时,为啥 android 会寻找 RNCGeolocation?

react-native 中的 navigator.geolocation.getCurrentPosition 是不是与本地地理定位方法一样准确?

React Native Geolocation 在 IOS 上无法正常工作