gpt4 book ai didi

ios - 核心蓝牙 : How can the peripheral manager know that the central received an indication?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:02:44 25 4
gpt4 key购买 nike

我试图解决的基本问题如下。我有两台 iOS 设备,一台配置为中央设备,另一台配置为外围设备。我希望外围设备知道中央是否由于某种原因离开或变得不活动(比如运行中央的设备已关闭)。

在正常情况下,我将其设置为当中央靠近外围设备时,中央设备可以使用信标区域和测距通过特征写入通知外围设备(CLProximityImmediate) ,然后当它仍在范围内但距离很远时再次出现 (CLProximityFar)。这很好用。

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

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

我在这里遗漏了什么明显的东西吗?外围管理器有没有办法告诉中央没有收到指示?或者在这种情况下,CoreBluetooth 中是否缺少回调?

感谢您的帮助!

最佳答案

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

  1. iBeacon 是被动的,仅用于广播和传输设备。在 Apple 实现中,Core Location 框架没有与它们建立连接。因此外围更新者知道有人听过他们的广播。

  2. CLBeacon 不会将底层 BTLE 外设公开为 CBPeripheral ,因此您将无法让 BTLE 外围设备知道您的位置监视器在范围内。

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

  1. 开始扫描 CBPeripherals,其中 advertisementData 包含 proximityUUID

  2. 连接到那个 CBPeripheral 并得到特征值变化的通知。

  3. 经常更改外围设备上的特征值,因此当 Central 在超时期限后看不到更多通知时,表明外围设备超出范围。

  4. 如果您想让它适用于多个 iOS 设备,那么在广告和 iBeacon 之间切换并作为 GATT 外围设备工作会变得很复杂。

关于ios - 核心蓝牙 : How can the peripheral manager know that the central received an indication?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19130006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com