在iOS中,我们在后台实现了ibeacons的监控和测距。当设备进入某个区域时,我们会在后台开始测量ibeacons。当设备退出某个区域时,我们会在后台停止测量ibeacons。
当我们在启动应用程序时发出以下语句时,这非常有效: locationManager.startUpdatingLocation()
我们可以在我们在该地区的整个时间内将信标保持在后台。
当我们不发出此声明时,后台中iBeacons的范围在启动后几秒钟后停止。这对我们的应用来说还不够好,因为我们需要在一个区域内保持信标的范围。 我们还看到,以这种方式监视和测量背景中的信标需要大量的电池电量。
有没有人经历过这个?后台的电池消耗是由startUpdatingLocation()引起的(它还为我们不需要的纬度和经度生成didUpdateLocations()的回调)?还有另一种方法可以避免在后台几秒钟后停止信标的测距吗?
我看到了这个其他条目Beacon Ranging in Background on iOS,但只有180秒也不是我们真正想要的。条目说: 为了解决在转换后仅获得10秒测距时间的第二个问题,您可以请求额外的时间来保持测距。 iOS允许您在后台继续播放长达180秒。这不需要后台模式,也不需要AppStore的特殊许可。
答案 0 :(得分:4)
我写了一篇关于你在这里有各种选择的博客文章:
http://developer.radiusnetworks.com/2014/11/13/extending-background-ranging-on-ios.html
基本选项是:
使用位置背景模式在后台不断调整范围 - 这与设置locationManager.startUpdatingLocation()
时提到的技术基本相同。缺点是您必须说服Apple有一个位置应用程序才能获得AppStore的批准。
请求额外的后台运行时间。博客文章链接中提到了详细信息,但这只能让您获得180秒。
通过影响您进入和退出信标放置区域的方式,对系统进行游戏以获得180秒的多个周期。
使用默认的10秒背景范围。
无论您选择哪种方式,信标的范围都比监控更多,电池密集程度更高。如果你的距离不断,预计几个小时内电池就会耗尽。
答案 1 :(得分:0)
信标上的测距设计为低功率,但仅在前景时使用。当应用程序关闭或后台运行时,它仅用于处理didEnterRegion和didExitRegion。测试本身不是太耗电,所以我想说你的罪魁祸首是locationManager.startUpdatingLocation。它将启动GPS硬件并不断获取您的位置,即使您没有使用它。
您的用例是否与您链接的帖子类似?