使用iBeacon时,可最大程度减少iOS中Beacon Ranging的电池消耗

问题描述

我正在研究一个用例,该用例在扫描信标时需要连续的回调。 我想到了两种方法,但是它们都有问题。

  1. 监视:监视仅提供进入和退出回调。仅收听20个信标有一个限制。还可以定义一个范围来获取进入和退出回调吗?就像说,如果一个广告信标进入2米范围内,我会收到一个进入回调,如果设备移出该范围,我会得到一个退出回调。

  2. Ranging:Ranging提供连续的回调以及一组其他参数(如RSSi)以计算距离。不过,在进行测距时,最大的问题是与监控相比,它消耗了疯狂的电池电量。在优化电池消耗的同时获取连续回调的方法应该是什么?

我已经尝试了两种方法,但都走到了尽头。因此,这似乎是一个理论问题,但尚无任何以某种方式解决用例的见识。

解决方法

使用iOS CoreLocation信标监视API时,无法设置任何类型的rssi或距离过滤器。使用iBeacon时,测距是唯一的选择。

尽管不断进行BLE扫描会消耗电池电量,但是您可以通过根据需要以较低的占空比进行扫描来缓解这种情况,从而满足您的要求。例如,您可以以20%的占空比进行扫描(并使用20%的电池作为恒定范围的电量),方法是每分钟进行12秒的范围调整。您可以根据需要调整此占空比,以在电池节省和响应能力之间达到平衡。我参与了一些项目,这些项目根据应用程序的状态更改了此占空比,因此,当应用程序重要时,它可以对信标有更好的响应;而在响应性不那么重要时,可以节省电池。

为了完全能够做到这一点,您必须解锁让iOS让您的应用在后台无限期运行的功能:

  1. 将位置背景模式添加到Info.plist
  2. 获得用户“始终”的位置许可。仅获得“使用时”权限是不够的。
  3. 按照以下说明启动后台任务:http://www.davidgyoungtech.com/2014/11/13/extending-background-ranging-on-ios
  4. 从CoreLocation请求3公里位置更新。这将使应用程序在后台运行,而不会因GPS消耗过多电池电量,因为3 km的精度仅使用蜂窝无线电。您无需对这些结果进行任何处理。您只需要请求他们使应用程序保持运行状态即可。

完成上述操作后,您可以在计时器上调用locationManager.startRangingBeacons(...)locationManager.stopRangingBeacons(...)来实现所需的占空比。