客户修改需求,上班时间需要获取用户轨迹,需要适配安卓和ios。
1.重写滑动两下退出应用:
// main.js最下面加上
let main = plus.android.runtimeMainActivity();
//为了防止快速点按返回键导致程序退出重写quit方法改为隐藏至后台
plus.runtime.quit = function() {
main.moveTaskToBack(false);
};
//重写toast方法如果内容为 ‘再次返回退出应用’ 就隐藏应用,其他正常toast
plus.nativeUI.toast = (function(str) {
if (str =='再次返回退出应用') {
plus.runtime.quit();
/* 安卓通知栏提醒显示 */
var content = "上班时间请保持不要清除应用!";
var options = {
"cover": false, // 覆盖上次
"when": new Date(),
'title': "城寻通通知消息"
};
plus.push.createMessage(content, '', options);
/* end */
} else {
uni.showToast({
title: '再次返回退出应用',
icon: 'none'
})
}
});
2.核心:plus.geolocation.watchPosition
let watchLocation = plus.geolocation.watchPosition( function ( res ) {
console.log('获取坐标',res.coords.longitude,res.coords.latitude )
}, function ( e ) {
}, {'enableHighAccuracy':true,'geocode': false} );
}
安卓配置 之后会 常驻后台获取定位。
苹果需要在manifest.json中添加持久化
"ios" : {
"dSYMs" : false,
"UIBackgroundModes": "location",
},
配置之后在原生基座里面 还是不会常驻,需要自定义基座 或者 打包。
踩到巨大的坑
项目中 在调试过程中 设置十五分钟上传一次定位 从 plus.geolocation.watchPosition 中拿出数据。一直很正常,但是安装到真实设备后 时间越来越长。原本以为代码问题,经过多重排查,也没找到原因,调试过程也找不到原因(调试过程没出现这个问题)。最后发现 安卓的智能应用省电模式,会给你降低定位效率。
坑的原因
1.安卓的应用休眠机制(省电机制) 把app冻结 放慢速度。
2.setInterval、setTimeout 休眠越来越慢
解决方案
- 加入省电白名单
- real-interval 安装这个包 pass计时器
npm install real-interval
<script src="./build/interval.js"></script>