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

时间:2015-06-10 14:03:33

标签: ios bluetooth core-bluetooth cbcentralmanager

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

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

但是,如果外围设备消失了,我就无法更新字典。#34>。似乎我只能在检测到它时在我的词典中添加外围设备,但是当我关闭它时我无法删除它。

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

2 个答案:

答案 0 :(得分:5)

操作系统将缓存设备的发现。即每个设备只能获得一个“发现”事件。

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

  

CBCentralManagerScanOptionAllowDuplicatesKey

     

一个布尔值,指定扫描是否应该运行   重复过滤。

     

此键的值是NSNumber对象。如果是,则过滤   每次中央时都会生成禁用和发现事件   从外围设备接收广告包。禁用此功能   过滤会对电池寿命产生不利影响,应该是   仅在必要时使用。如果否,则多次发现相同   外围设备合并为一个发现事件。如果关键是   未指定,默认值为NO。

将上述选项设置为YES,您可以跟踪所有广告的外围设备,当它停止投放广告时,您可以将其从列表中删除。

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

蓝牙设备不会宣传它们即将消失,也不宣传您即将超出范围。你在广告中得到一则广告而且你在范围内,当你超出范围或停止广告时,你什么都得不到。当它们消失时,没有任何事件可以触发。您必须记住广告中的设备,当它们停止广告时(您暂时没有收到广告),您可以将其从列表中删除。

答案 1 :(得分:0)

马库斯的精彩回答。另外需要注意的一点是,如上所述的扫描选项CBCentralManagerScanOptionAllowDuplicatesKey在后台不起作用。

指定蓝牙中央背景模式的应用程序可以在后台扫描。也就是说,他们必须通过在serviceUUIDs参数中指定它们来显式扫描一个或多个服务。在后台扫描时忽略CBCentralManager扫描选项。