|
本帖最后由 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中
|
|