我正在做一个项目,其中固定的iPad将充当BLE外围设备,而iPhone将充当BLE中心。当iPhone在iPad的几米之内进入时,iPhone将执行某项操作。 iPhone必须能够在后台运行或锁定。
我一直在使用 CoreLocation 库来创建iBeacon。使用定位方法,CoreLocation使我能够找到信标的准确性和接近度。但是,从我发现的结果来看,CoreLocation 不允许允许后台范围调整。我还发现,对信标区域进行监视可以触发 enter / exit 事件,这使我可以临时启动该应用程序(约5秒),然后进行准确性和范围调整。接近。但是,此解决方案不起作用,因为 iPad的信标范围很大,并且中央设备会在设备到达我的目标范围很久之前触发进入/退出事件(几米的外围设备。
因此,我一直在研究 CoreBluetooth库,以替代 CoreLocation / iBeacons 。我知道使用CoreBluetooth时,我将不得不根据RSSI手动计算距离。
我的第一个问题是 Are my assumptions correct? Would CoreBluetooth be a good alternative to use for this project?
我的第二个问题是 Can the iPhone (central) determine the distance between itself and the iPad (peripheral) while locked or running in the background?
谢谢!
答案 0 :(得分:1)
CoreBluteooth通常不能很好地替代CoreLocation ,用于检测信标有多种原因:
使用Core Bluetooth根本无法检测iBeacon传输。 Apple明确禁止您执行此操作,如果广告数据与iBeacon匹配,则将CoreBluetooth API中的广告数据删除。
在后台使用CoreBluetooth检测其他信标格式的能力很差。制造商的广告(例如AltBeacon)几乎完全在后台被阻止(您只能检测到一个数据包!)。服务广告(例如Eddystone)可以在后台检测到,但是相对于CoreLocation而言,回调非常慢。
缺少许多其他CoreLocation功能,例如应用程序在信标检测上自动启动,以及在应用程序暂停时可进行快速背景检测的硬件过滤器。
实际上,您可以使用CoreLocation在后台使用多种不同方式来定位信标:
以上选项2和3可用于CoreLocation,但不能用于CoreBluetooth。要进入带有选项3的AppStore,您必须说服Apple评论者您的应用程序提供了合法的后台位置跟踪功能。
最后,您可以根据CLBeacon#rssi属性进行自己的距离计算。最好将其平均20到30秒以减少噪声,并且由于某种原因,第三方软件无法读取信标帧中嵌入的RSSI,因此您需要以自己的参考值表示1米处的RSSI期望值。 。但是您可能不需要这样做。如果您只是通过应用程序定位iPad,则只需用iPad的预期1米距离RSSI调整信标内的校准常数,即可获得更精确的距离测量值。
在某些情况下,尽管存在上述缺点,您仍然想要使用CoreBluetooth。因此,我建立了this repo。