我要解决的基本问题如下。我有两台iOS设备,一台配置为中央设备,另一台配置为外围设备。我希望外围设备知道中央设备是否由于某种原因而离开或变为非 Activity 状态(例如运行中央设备的设备已关闭)。

在正常情况下,我进行了设置,以便当中心靠近外围设备时,中心可以使用信标区域和测距功能,以在外围设备接近时(CLProximityImmediate)通过特征写入通知外围设备,然后当它仍然在范围内但又相距很远时(CLProximityFar)。这很好。

但是,为了在中央设备从CLProximityImmediate变为某个未知状态时遇到紧急情况,我计划使用来自外围设备的周期性指示,以使中央设备可以响应。如果对指示没有响应,则外围设备可以假定中心不再紧邻。但是,我找不到能够通知外围设备管理器指示失败的回调或委托方法。

方法updateValue:forCharacteristic:onSubscribedCentrals:当基础传输队列已满时返回NO,并且不是因为中心没有响应,这是我理解的方式。

我在这里错过明显的东西吗?外围设备管理员有没有办法告诉中心未收到指示?还是在这种情况下CoreBluetooth中缺少回调?

谢谢你的帮助!

最佳答案

有两个问题可让外围设备知道位置管理器与CLBeacon失去联系:

  • iBeacon是被动的,仅通告和传输设备。与在Apple实施中一样,Core Location框架没有与它们建立任何连接。因此,外围设备更新者知道有人听了他们的广播。
  • CLBeacon不会将底层BTLE外围设备公开为CBPeripheral,因此您将无法让BTLE外围设备知道您的位置监控器在范围内。

  • 问题2可以通过相当复杂的方式解决:
  • 开始扫描CBPeripherals,其中advertisementData包含proximityUUID
  • 建立与该CBPeripheral的连接,并收到有关特征值更改的通知。
  • 经常更改外围设备上的特征值,因此,当中央服务器在超时时间段后没有看到更多通知时,表明外围设备超出范围。
  • 如果要使其适用于多个iOS设备,则在广告和iBeacon之间切换以及用作GATT外设会变得很复杂。
  • 关于ios - CoreBluetooth:外围设备管理器如何知道中央设备已收到指示?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19130006/

    10-11 22:32
    查看更多