我正在开发一个项目,其中固定的iPad将充当BLE外围设备,而iPhone将充当BLE中心。随着iPhone进入iPad的几米之内,iPhone将会有所作为。 iPhone需要能够在后台运行或锁定。
我一直在使用CoreLocation库来创建iBeacon。使用测距方法,CoreLocation允许我找到信标的准确性和接近度。但是,根据我的发现,CoreLocation不允许进行背景测距。我还发现,对信标区域的监控可以触发进入/退出事件,这允许我暂时(~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?
提前致谢!
CoreBluteooth通常是用于检测信标的CoreLocation的不良替代品,原因如下:
实际上,您可以使用CoreLocation以几种不同的方式在后台使用信标范围:
上面的选项2和3可用于CoreLocation但不适用于CoreBluetooth。要使用选项3进入AppStore,您必须说服Apple审阅者您的应用程序正在提供合法的后台位置跟踪功能。
最后,您可以根据CLBeacon#rssi属性进行自己的距离计算。最好将其平均超过20-30秒以减少噪音,并且您将以某种方式需要您自己的参考值来预期RSSI在1米处,因为嵌入在信标帧中的那个不能被第三方软件读取。但你可能不需要这样做。如果你只是用你的应用程序瞄准iPad,你可以简单地调整信标内的校准常数与iPad的预期1米距离RSSI,你应该得到更准确的距离测量。
在某些情况下,尽管有上述缺点,您仍然希望使用CoreBluetooth。出于这个原因,我建立了this repo。