百度地图API后台持续定位、指南针改变位置问题
2016-08-26 14:25
1041 查看
最近的需要用到后台持续定位,项目中又是用的百度地图API,遇到点麻烦:
1、进入后台,手机静置,定位持续16分钟左右就停止了,但是还是无限后台效果;但如果一直运动,让定位持续更新,定位服务一直保持
其实是API中的自动暂停定位属性 默认是true,设置为false,就不会自动关闭了
记得设置Background Modes:
下面是AppDelegate中进入后台后的处理办法:
在适当的地方注册通知,实现通知触发的方法即可,在方法中再次开始定位即可
2、地图图层上的指南针如何移动位置:
虽然API中明确了属性compassPosition来修改位置,但是如果不注意视图的load顺序,修改是无效的。所以注意:需要在mapViewDidFinishLoading之后,再去修改位置,才能生效。
1、进入后台,手机静置,定位持续16分钟左右就停止了,但是还是无限后台效果;但如果一直运动,让定位持续更新,定位服务一直保持
其实是API中的自动暂停定位属性 默认是true,设置为false,就不会自动关闭了
_locService = BMKLocationService() _locService!.delegate = self // 允许后台定位 打开 _locService!.allowsBackgroundLocationUpdates = true // 自动暂停定位 关闭 _locService!.pausesLocationUpdatesAutomatically = false //启动LocationService _locService!.startUserLocationService()
记得设置Background Modes:
下面是AppDelegate中进入后台后的处理办法:
func applicationDidEnterBackground(application: UIApplication) { print("进入后台---持续定位") let application = UIApplication.sharedApplication() // 设置后台后,600s内触发至少一次的方法 let shouldRestartLoc = application.setKeepAliveTimeout(600, handler: { self.backgroundHandler() }) if shouldRestartLoc { print("backgrouding accepted") } else { backgroundHandler() } } func backgroundHandler() { let application = UIApplication.sharedApplication() bgTask = application.beginBackgroundTaskWithExpirationHandler { if(self.bgTask != UIBackgroundTaskInvalid){ self.bgTask = UIBackgroundTaskInvalid; } } dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { while (true) { // 发送通知,重开locationService定位服务 let noticeCenter = NSNotificationCenter.defaultCenter() noticeCenter.postNotificationName("restartLocationService", object: self, userInfo: nil) print("剩余时间:\(application.backgroundTimeRemaining)") sleep(5) } } }
在适当的地方注册通知,实现通知触发的方法即可,在方法中再次开始定位即可
// 注册通知 let notice = NSNotificationCenter.defaultCenter() notice.addObserver(self, selector: #selector(restartLocationService), name: "restartLocationService", object: nil) ----------------------------------------------------- // 重新定位 func restartLocationService() { _locService!.startUserLocationService() _locService!.allowsBackgroundLocationUpdates = true _locService!.pausesLocationUpdatesAutomatically = false }
2、地图图层上的指南针如何移动位置:
虽然API中明确了属性compassPosition来修改位置,但是如果不注意视图的load顺序,修改是无效的。所以注意:需要在mapViewDidFinishLoading之后,再去修改位置,才能生效。
func mapViewDidFinishLoading(mapView: BMKMapView!) { _mapView!.compassPosition = CGPointMake(10,5) // 设置指南针位置 }
相关文章推荐
- CoreLocation 的基本使用 以及定位 指南针的实现 (附加: 系统版本适配的方法,和后台更新用户位置的方法及注意)
- 百度地图api位置检索LocalSearch无法定位问题
- 项目网站页面制作中如何快速定位导致页面莫名问题位置!
- PHP中usort在值相同时改变原始位置问题的解决方法
- iOS开发 - 百度地图后台持续定位
- 如何精确定位固定大小的div在网页的中间位置并且不随分辨率的设置改变(位置大小都不变)
- 解决子元素margin让父辈元素位置一起改变的问题
- 如何解决VS.NET中应用程序编译完后改变引用位置的问题
- JS 侧栏导航点击定位页面内容位置及滚动条滚动改变导航元素对应状态
- IOS 后台定位并向服务器发送当前位置
- 关于iOS后台问题( 一 )(ios后台刷新,后台定位,后台下载,真后台)
- 【转】IOS 后台定位并向服务器发送当前位置
- MFC程序,在改变系统DPI后,控件显示位置混乱的问题
- 百度地图API应用之——利用定位SDK和地图SDK来进行定位和显示当前位置
- 舞台系统 后台图片改变但是 前台出现图片不正确问题以及解决方法
- UIWebview 地理位置定位问题
- js动态改变HiddenField值,后台不能获取值的问题
- ListView 之定位问题(滚动到某一项目到特定位置)!!!
- win32窗口:关于鼠标定位位置偏移问题的原因及解决方法
- DIV标签的位置定位问题