付权
付权
  • 发布:2016-01-13 14:41
  • 更新:2020-02-15 20:44
  • 阅读:10235

h5+实时定位问题 setInterval中只执行一次getCurrentPosition

分类:HTML5+

参考问题:http://ask.dcloud.net.cn/question/10078
刚开始学习html5+App 要实现定时发送位置信息功能,看了官方示例如下,确实简单明了
官网示例
<!DOCTYPE html>
<html>****
<head>
<meta charset="utf-8">
<title>Geolocation Example</title>
<script type="text/javascript" >
// 扩展API加载完毕后调用onPlusReady回调函数
document.addEventListener( "plusready", onPlusReady, false );
// 扩展API加载完毕,现在可以正常调用扩展API
function onPlusReady() {
plus.geolocation.getCurrentPosition( function ( p ) {
alert( "Geolocation\nLatitude:" + p.coords.latitude + "\nLongitude:" + p.coords.longitude + "\nAltitude:" + p.coords.altitude );
}, function ( e ) {
alert( "Geolocation error: " + e.message );
} );
}
</script>
</head>
<body >
</body>
</html>

不过问题来了,现在要自动隔段时间就发送一下位置了,采用上面的方法getPosBaidu,加上下面这句,期间可能遇到其他问题plus未定义啊什么的,不过不是关键
setInterval('getPosBaidu()', 10000);
调试结果:
执行了一次getPosBaidu
然后就over了
原因可能是阻塞啊 什么的,具体我也不太懂了,就觉得跟setInterval有关

怎么办?
看了一堆dcloud定位相关问题的贴子,特别混乱。
总结下可能的方法,
1、自己开发5+sdk插件替换getCurrentPosition
2、Native.js 调用本地替换getCurrentPosition
3、换掉setInterval 用别的方法定时触发
4、曲线利用 plus.geolocation.watchPosition

结果当然是1,2太复杂,还没动。
4 方法,看了半天,watchPosition 这个方法也没太懂,继续setInterval 只用plus.geolocation.watchPosition 直接取代getCurrentPosition :开始监视触发一次,然后清楚监视就是一次啦,不过依然没用。
3方法目前算是成功了。

有其他方法的同学,请告知,毕竟这个办法也太曲线了。

html5+ 官方需要继续改进,要加快进度。 控制变量法:自己做到最好,历史才能选择究竟谁才是未来的主流,希望html5+应用火起来。
End。。。

2 关注 分享
ali 7***@qq.com

要回复文章请先登录注册

5***@qq.com

5***@qq.com

watchId = plus.geolocation.watchPosition(function(res) {
//console.log('App.vue watchGeoBaidu定位成功:' + JSON.stringify(res));


}, function(e) {
console.log('Error:' + JSON.stringify(e));
}, {
provider: 'amap',
//是否使用高精度设备,如GPS。默认是true
enableHighAccuracy: true,
//超时时间,单位毫秒,默认为0
timeout: 5000,
//使用设置时间内的缓存数据,单位毫秒
//默认为0,即始终请求新数据
//如设为Infinity,则始终使用缓存数据
maximumAge: 0
});
2020-02-15 20:44
1***@qq.com

1***@qq.com

顶顶
2020-01-17 17:54
1***@qq.com

1***@qq.com

官方有没有正解
2020-01-17 17:29
1***@qq.com

1***@qq.com

。。
2020-01-17 16:46
1***@qq.com

1***@qq.com

现在把provider换成system也只能获取一次定位,官方什么时候来解决一下啊
2020-01-17 16:00
5***@qq.com

5***@qq.com

回复 桥西下 :
把provider换成system后,有的手机会无法定位
2018-07-06 11:39
1***@qq.com

1***@qq.com

mark
2017-05-05 10:07
桥西下

桥西下

把provider换成system就行了,我也是刚试出来的
2016-05-08 11:41
最坏是单飞

最坏是单飞

watchPosition 直接用这个就可以,不过目前要是获取的参数是bd09会报错
2016-04-27 13:03