我希望创建一个不遵循Apples iBeacon规范的BLE Beacon。原因是"信标"将是一个arduino设备,应用程序也应该能够通信,以指示它做的事情。 iOS上是否支持此功能?我听说有关iOS 8通过蓝牙锁定通用设备广告的传闻。
提前致谢。
答案 0 :(得分:1)
是的,您可以使用CoreBluetooth
API执行此操作,但根据您使用的蓝牙LE广告的类型,有一些限制。
<强> 1。制造商广告
您可以使用CoreBluetooth
读取制造商广告的所有字节(最多24个字节),但只有当应用程序位于前台时才能读取。在后台,您将不会收到任何回调。这通常与第二个iBeacon广告配对,该广告在iOS上的后台唤醒应用程序。有关此类广告的示例,请参阅AltBeacon specification.
<强> 2。关贸总协定服务广告
即使应用程序在后台,GATT服务广告检测也将由CoreBluetooth
发送到应用程序,前提是应用程序专门查找信标的GATT服务UUID。这种方法的缺点是数据有效载荷通常仅限于2字节服务UUID之后的18个字节。
其他详情
对于两种广告类型,您可以使用GATT连接到设备,以及读取和写入数据。但请注意,一旦连接设备,通常会停止将广告作为信标。
上述两项工作都与iOS 8相同。很难预测未来,但苹果似乎不太可能锁定上述两个用例,因为它们被广泛用于蓝牙LE应用程序来自Beacons。
您可以在this blog post中查看阅读这些广告的基本步骤。虽然这篇文章特别关注Apple如何过滤出iBeacon广告,但如果您制作自己的自定义制造商广告,它将允许您按照帖子中的描述读取字节。
为了完整起见,上述两种广告类型都可以由前景和后台的Android设备选取。