起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2768|回复: 7

[结贴] 监听位置执行失败回调的原因,求解答

[复制链接]

29

主题

113

帖子

199

积分

初级会员

Rank: 2

积分
199
QQ
发表于 2018-6-4 10:31:23 | 显示全部楼层 |阅读模式
本帖最后由 newProgrammer 于 2018-6-4 11:14 编辑

做了一个实时定位的功能,要求支持后台运行,用到了如下插件
require("$UI/system/lib/cordova/cordova");
require("cordova!cordova-plugin-geolocation");
require("cordova!de.appplant.cordova.plugin.background-mode");


运行app执行了navigator.geolocation.getCurrentPosition(successCallback, errorCallback);中的successCallback()回调,获取到了经纬度,这里没问题
然后执行如下代码
//激活后台运行
                document.addEventListener('deviceready', function() {
            cordova.plugins.backgroundMode.enable();

            cordova.plugins.backgroundMode.onactivate = function() {
                timer = setInterval(function() {                        alert("后台运行")
                        // 监听位置
                                var me = this;
                                me._watchID = navigator.geolocation.watchPosition(success, error);
                                function success(position) {
                                        alert("监听位置")
                                        me._longitude = position.coords.longitude;
                                        me._latitude = position.coords.latitude;
                                        server.sendRequest({
                                                "url" : "/test/update",
                                                "async" : false,
                                                "params" : {
                                                        ygId : localStorage.getItem("userid"),
                                                        latitude : me._latitude,
                                                        longitude : me._longitude
                                                }
                                        });

                                }
                                function error() {
                                        justep.Util.hint("获取当前位置失败");
                                }
                }, 3000);
            };
            cordova.plugins.backgroundMode.ondeactivate = function() {                clearInterval(timer);
                alert("停止监听")
                var me = this;
                alert(me._watchID)
                if(me._watchID){
                        navigator.geolocation.clearWatch(me._watchID);
                        me._watchID = null;
                }
            };
        });

在这里只执行了alert("停止监听"),没有执行alert("监听位置"),后来调试过程中发现监听位置的回调执行的error,请问这是什么原因
补充:获取位置时也发送了请求,保存经纬度,并且获取位置和激活后台模式等都在modelLoad中

发表于 2018-6-4 13:25:15 | 显示全部楼层
clearWatch 和 watchPosition 是成对出现的,
需要先调用watchPosition  再调用clearWatch

如果执行watchPosition 之前已经关闭了,就无法定位了
可以在watchPosition  的成功回调中执行 clearWatch 试试
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

29

主题

113

帖子

199

积分

初级会员

Rank: 2

积分
199
QQ
 楼主| 发表于 2018-6-4 16:18:29 | 显示全部楼层
liangyongfei 发表于 2018-6-4 13:25
clearWatch 和 watchPosition 是成对出现的,
需要先调用watchPosition  再调用clearWatch

试过了,但是提示定位失败    附代码
//激活后台运行
                document.addEventListener('deviceready', function() {
            cordova.plugins.backgroundMode.enable();
            
            cordova.plugins.backgroundMode.onactivate = function() {
                timer = setInterval(function() {
                        alert("后台运行")
                        // 监听位置
                                me._watchID = navigator.geolocation.watchPosition(success, error);
                                alert(me._watchID)
                                function success(position) {
                                        alert("监听位置")
                                        me._longitude = position.coords.longitude;
                                        me._latitude = position.coords.latitude;
                                        server.sendRequest({
                                                "url" : "/test/update",
                                                "async" : false,
                                                "params" : {
                                                        ygId : localStorage.getItem("userid"),
                                                        latitude : me._latitude,
                                                        longitude : me._longitude
                                                }
                                        });
                                        alert("停止监听")
                        if(me._watchID){
                                navigator.geolocation.clearWatch(me._watchID);
                                me._watchID = null;
                        }
                                }
                                function error() {
                                        justep.Util.hint("获取当前位置失败");
                                }
                }, 3000);
            };
            cordova.plugins.backgroundMode.ondeactivate = function() {
                clearInterval(timer);
            };
        });
回复 支持 反对

使用道具 举报

发表于 2018-6-4 17:04:58 | 显示全部楼层
newProgrammer 发表于 2018-6-4 16:18
试过了,但是提示定位失败    附代码
//激活后台运行
                document.addEventListener('deviceready', funct ...

是不是ak 参数 不正确呢??
需要先保证打包参数没问题
http://docs.wex5.com/wex5-app-question-list-2098


你先试试appLoader运行是否正常?
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

29

主题

113

帖子

199

积分

初级会员

Rank: 2

积分
199
QQ
 楼主| 发表于 2018-6-4 17:24:25 | 显示全部楼层
本帖最后由 newProgrammer 于 2018-6-4 17:25 编辑
liangyongfei 发表于 2018-6-4 17:04
是不是ak 参数 不正确呢??
需要先保证打包参数没问题
http://docs.wex5.com/wex5-app-question-list-20 ...

情况是这样的,我把代码写在了首页,没用到地图,这个定位用户是看不到的,我只是想实时获取经纬度,然后在别的地方用
回复 支持 反对

使用道具 举报

29

主题

113

帖子

199

积分

初级会员

Rank: 2

积分
199
QQ
 楼主| 发表于 2018-6-5 09:12:06 | 显示全部楼层
liangyongfei 发表于 2018-6-4 17:04
是不是ak 参数 不正确呢??
需要先保证打包参数没问题
http://docs.wex5.com/wex5-app-question-list-20 ...

me._watchID = navigator.geolocation.watchPosition(success, error);有哪些情况下会执行error回调
回复 支持 反对

使用道具 举报

发表于 2018-6-7 17:36:24 | 显示全部楼层
newProgrammer 发表于 2018-6-5 09:12
me._watchID = navigator.geolocation.watchPosition(success, error);有哪些情况下会执行error回调 ...

不显示地图 也需要ak参数正确
想用百度地图定位就要保证正确性!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

29

主题

113

帖子

199

积分

初级会员

Rank: 2

积分
199
QQ
 楼主| 发表于 2018-6-8 15:49:54 | 显示全部楼层
liangyongfei 发表于 2018-6-7 17:36
不显示地图 也需要ak参数正确
想用百度地图定位就要保证正确性!

解决了,结贴吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-4-20 13:45 , Processed in 0.101019 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表