Ios CoreBluetooth:外围设备管理器如何知道中央设备接收到指示?

Ios CoreBluetooth:外围设备管理器如何知道中央设备接收到指示?,ios,core-bluetooth,bluetooth-lowenergy,Ios,Core Bluetooth,Bluetooth Lowenergy,我试图解决的基本问题如下。我有两个iOS设备,一个配置为中央设备,另一个配置为外围设备。我想让外设知道是否由于某种原因(例如,运行中央设备的设备已关闭)中央设备移开或处于非活动状态 在正常情况下,我将其设置为,当中央移动到外围设备附近时,中央设备可以使用信标区域和测距,在其处于紧邻位置时(CLProximityImmediate)通过特征写入通知外围设备,然后在其仍在范围内但距离较远时(CLProximityFar)再次通知外围设备。这很有效 然而,当中央设备从CLProximityImmedi

我试图解决的基本问题如下。我有两个iOS设备,一个配置为中央设备,另一个配置为外围设备。我想让外设知道是否由于某种原因(例如,运行中央设备的设备已关闭)中央设备移开或处于非活动状态

在正常情况下,我将其设置为,当中央移动到外围设备附近时,中央设备可以使用信标区域和测距,在其处于紧邻位置时(CLProximityImmediate)通过特征写入通知外围设备,然后在其仍在范围内但距离较远时(CLProximityFar)再次通知外围设备。这很有效

然而,当中央设备从CLProximityImmediate变为未知状态时,为了捕捉一个拐弯情况,我计划使用中央设备可以响应的外围设备的周期性指示。如果没有对指示的响应,则外围设备可以假定中央设备不再处于紧邻位置。但是,我无法找到通知外围设备管理器指示失败的回调或委托方法

当底层传输队列已满时,updateValue:forCharacteristic:onSubscribedCentrals:方法返回NO——这并不是因为中心没有响应,我的理解是这样的

我是不是漏掉了什么明显的东西?外围设备管理器是否有办法告知中央设备未收到指示?或者CoreBluetooth中是否缺少此案例的回调


谢谢你的帮助

有两个问题需要让外围设备知道与失去联系的位置:

  • iBeacons是被动的、仅播发和传输设备。在苹果的实现中,没有从核心位置框架与它们建立连接。因此外围设备更新者知道有人听了他们的广播

  • CLBeacon
    不会将基础BTLE外围设备公开为,因此您无法让BTLE外围设备知道您的位置监视器在范围内

  • 问题2可以通过一种相当复杂的方式解决:

  • 开始扫描
    cb外围设备
    ,其中
    广告数据
    包含
    ProximityUID

  • 连接到该
    cb外围设备
    ,并获得特征值更改的通知

  • 频繁更改外围设备上的特征值,以便在超时后,当中央设备不再看到通知时,表明外围设备超出范围

  • 如果你想让它在多个iOS设备上工作,那么在广告和iBeacon之间切换以及作为GATT外设工作就变得复杂了


  • 虽然问题中没有明确说明这一点,但我的意思是,外围设备正在为具有两个特征的服务做广告。这是除了明确的iBeacon广告,我同意这是“被动的”。当中心收到信标区域的通知时,它发现并写入其中一个特征,并且外围设备可以知道中心在范围内

    我的基本问题不是关于信标的被动性质,而是关于“指示”如何与蓝牙协同工作。我认为,如果外围设备使用
    updateValue:forCharacteristic:onSubscribedCentrals:
    通知订阅了定义为
    CBCharacteristicPropertyIndicate
    的特征的中心设备,则可以相当安全地说,没有定义回调来捕获对应该从中心设备返回的指示的确认(每个间隙)

    对于这个缺失的API,一个解决方法是将第三个特征定义为“确认”特征,并施加一个协议,即每当中央接收到订阅的指示时,中央应对此特征进行虚拟读取。这将产生对外围设备上的
    外围设备管理器:didReceiveReadRequest:
    ,以确认e收到指示


    这是更多的工作,并不是最优雅的方式,但考虑到没有用于指示确认的API,这可能是最好的方式。

    如果您使用通知和计时器,会怎么样?不过,这是一个好问题。您的回答确实有帮助,而且似乎是一个体面的工作。因此,如果灯塔广告是被动的,就没有wa我们可以在一个特定的信标和一个中央设备之间有一个类似于
    会话的东西?或者有吗?一个可以在一个外围设备和一个中央设备之间有一个会话。但是,为了实现这一点,中央设备必须位于前台,以连接到一个设备,并发现其他服务。在bac中kground,这目前不起作用。请参阅我对另一个有关背景和核心蓝牙的相关问题的回答:谢谢你的评论和链接。我阅读了你的其他答案。但是我现在仍然确定如何实现
    会话。按会话,你是否试图说出上述答案的建议?即写信给不同的租用特征以告知会话状态…是的,除了信标之外,您还可以实现一组不同的读/写特征并建立会话。