在 React Native 出错后重试地理定位

Posted

技术标签:

【中文标题】在 React Native 出错后重试地理定位【英文标题】:Retrying Geolocation after error in React Native 【发布时间】:2017-05-31 23:46:57 【问题描述】:

我正在使用 React Native 的 Geolocation API 来获取用户的位置或要求用户打开位置:

// Handle Permissionsandroid
this.watchID = navigator.geolocation.watchPosition(
    (position) => 
        // Update position
    ,
    (error) => 
        switch (error.code)
        
            Case 1: 
                // Ask user to turn on Location (Permission has already been asked for)
            
        
    
);

现在,如果用户稍后打开位置,我想重试 watchPosition。

使用 AppState,如果用户开始与通知栏交互(可能用户正在尝试打开位置),我尝试获取事件。但它只会在应用程序被发送到后台或再次激活时回调(但不是在通知栏交互期间)。

由于地理定位符合 W3 standards,因此我尝试在 Web 开发世界中寻找解决方案。但我found 的唯一解决方案是使用仅浏览器的 iFrame。

另外,一个不优雅的解决方案是 setInterval(比如每 5 秒),然后仅在返回位置时才 clearInterval。

有没有合适的方法来做到这一点?

【问题讨论】:

【参考方案1】:

您应该首先获取当前位置来启动流程,然后创建手表。以下内容来自 Geolocation 文档。

 navigator.geolocation.getCurrentPosition(
    (position) => 
      if (position) 
        //Handle first position
      
    ,
    (error) => (console.log(error)),
    enableHighAccuracy: true, timeout: 20000, maximumAge: 1000
  );

  this.watchID = navigator.geolocation.watchPosition((position) => 
    if (position) 
      // Handle new position
    
  );

我发现这可以从位置错误中恢复,以及处理权限请求(在 ios 10 上测试)。

【讨论】:

以上是关于在 React Native 出错后重试地理定位的主要内容,如果未能解决你的问题,请参考以下文章

使用 geolocation react-native 时出错

我无法在带有 redux 的 react-native 中使用地理定位

React Native:如何检查是不是已授予地理定位权限

react-native-mauron85-background 地理定位错误

在 iPhone 7 上 React Native 地理定位标题始终为 -1

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