我正在使用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。
有没有正确的方法呢?
答案 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上测试)。