当外围设备消失时如何使用CoreBluetooth进行检测?

dar*_*der 11 bluetooth ios core-bluetooth cbcentralmanager

我想有一个我的iOS可以连接的ble设备列表,当ble设备出现和消失时刷新.

为了做到这一点,我创建了一个NSMutableDictionnary* peripheralsAvailable,每次- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI;都由CBCentralManager调用,我将外设添加到peripheralsAvailable dictionnary(然后更新UITableView).一切都好.

但是,如果外围设备"消失",我无法找到如何更新字典.似乎我只能在检测到它时在我的词典中添加外围设备,但是当我关闭它时我无法删除它.

你能告诉我我是否遗失了什么?

Mar*_*ams 6

操作系统将缓存设备发现。也就是说,每个设备只会收到一个“发现”事件。

要在外围设备发布广告时连续获取发现事件,必须使用以下选项:

CBCentralManagerScanOptionAllowDuplicatesKey

一个布尔值,指定是否应在没有重复过滤的情况下运行扫描。

该键的值是一个NSNumber对象。如果为“是”,则过滤将被禁用,并且每当中心服务器从外围设备接收到广告数据包时,就会生成发现事件。禁用此过滤可能会对电池寿命产生不利影响,应仅在必要时使用。如果为“否”,则将同一外围设备的多个发现合并为一个发现事件。如果未指定密钥,则默认值为NO。

将以上选项设置为YES,您可以跟踪所有正在宣传的外围设备,并且在停止宣传时,可以将其从列表中删除。

对于您已连接的设备,存在didDisconnectPeripheral委托事件。


蓝牙设备不会宣传它们即将消失,也不会宣传您即将超出范围。当他们在广告中并且您在范围内时,您会收到一条广告;当您超出范围或他们停止广告时,您将一无所有。他们走了没有事件触发。您必须记住正在做广告的设备,并且当它们停止做广告时(您有一段时间没有收到广告了),您可以将其从列表中删除。

  • @kukudas,您的 BLE 外设可以定期使用不同的设备地址进行广告,以便客户端在后台将其视为不同的外设,但在广告数据包中具有实际 ID,以便客户端知道它确实是相同的外围设备。 (2认同)