在React Native中出错后重试Geolocation

时间:2017-05-31 23:46:58

标签: react-native geolocation

我正在使用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,我试图在用户开始与通知栏交互时获取一个事件(也许用户试图打开位置)。但它只会在应用程序发送到后台或再次激活时回调(但不会在通知栏交互期间)。

由于Geolocation符合W3 standards,我尝试在Web开发世界中搜索解决方案。但我found的唯一解决方案是使用仅限浏览器的iFrame。

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

有没有正确的方法呢?

1 个答案:

答案 0 :(得分:0)

您应首先获取当前位置,然后创建手表来启动流程。以下内容来自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上测试)。