Capabilities中Background Modes 勾了Location updates
info中配置了NSLocationAlwaysUsageDescription
审核通过后测试,也出了始终使用定位的提示。
这是我的代码:
程序切换到后台,3分钟后,watchPosition就不工作了,进入应用后会自动继续定位(不进成功的回调函数,也不进error)。
这到底是哪里的问题,能不能实现后台持续定位?
顺便问一句,为什么在iOS上这个maximumAge不起作用?
1 是离线打包吗?离线打包的话在Xcode项目中主VIEW中增加原生持续定位的代码就行啦~~
2 如果不是离线打包,就没法加原生代码了。。。
原生持续定位,参考:ios原生持续定位
非常简单,大概3个步骤
1 配置定位权限(估计你已经做了)
2 viewDidLoad方法中初始化定位管理器(CLLocationManager)
3 实现定位回调函数,从参数中取坐标(注意原生获取的坐标系和百度的不是一个类型,需要转化一下,百度定位SDK有Utils可以直接转化)
4 完成
1 ios貌似只能实现多少米一上报数据(原生定位是这样),所以时间间隔不好用
2 ios后台有3分钟限制,即3分钟定位后没有网络请求,或者位置没变化的话(不会触发定位事件),就会自动挂起后台进程
个人解决方案:
1 获取到位置,一定上传到服务器
2 服务器监听位置上传状态,如果超过几分钟没有上传,发推送到客户端,提醒重新开启app
3 据说百度,高德的原生定位sdk保活做的还不错,就是可以长时间获取位置进程还不被挂起,有能力的可以试试
4 如果第3条尝试了,记着来广播一下结果,让大家以后少一些坑
检查一下3分钟是否有过位置变动,如果有变动,还是会断掉,那就不正常了。
我这块是用原生写的,没有用到plus的监测位置变化,当时也是怕有这方面的问题。
我看你业务是考勤,似乎是个内部app,是否也可以考虑用原生层监听位置,然后调用鹰眼上报?
一共没几句代码也
小权 (作者)
是的,考勤这里对于外巡人员,需要实时查看他们的位置。所以现在必须要能实现锁屏(后台)状态下,应用能够持续获取位置信息。就像百度地图一样,不管锁屏多久,还是会持续获取位置进行导航。原生的没有实际接触过,还望指教。
2017-09-27 16:26
楼主 问下,弹出始终 的界面如何写的,我看默认是 使用期间内。但是我如果缩后台的时候,状态栏会提示我的程序正在使用位置
另外 我的定位间隔 这样实现的,声明2个时间变量,对时间变量进行操作
backSTime = myCommon.CurentTime();
var watchId = plus.geolocation.watchPosition( function ( p ) {
console.log( "监听位置变化信息:" + JSON.stringify(p) );
backETime = myCommon.CurentTime();
var chaTime = myCommon.GetDateDiff(backSTime,backETime,'second');
if(chaTime >= 10 ){
//重置开始时间
InsertRealTimeGPS(p.coords.longitude, p.coords.latitude);
backSTime = myCommon.CurentTime();
}
小权 (作者)
要出现“始终”选项,需要在离线打包时,进行相关配置:在XCode配置 Capabilities - Background Modes ,勾选Location updates。然后在info.plist配置相应的权限申请就行了。
时间间隔我后来也是设置变量,通过时间差判断来实现的,跟你的做法原理一致。
2018-02-08 17:14
小权 (作者)
是离线打包的。这个我之前在网上也找过类似的原生代码,复制过去后,报错,又完全没有原生开发的基础,所以就放弃了。。那我再按你给的参考试一下,感谢
2017-09-27 16:39