客户修改需求,上班时间需要获取用户轨迹,需要适配安卓和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 休眠越来越慢

解决方案

  1. 加入省电白名单
  2. real-interval 安装这个包 pass计时器
npm install real-interval
<script src="./build/interval.js"></script>

作者 译文

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注