为啥 iOS 蓝牙会多次发现同一设备?

Posted

技术标签:

【中文标题】为啥 iOS 蓝牙会多次发现同一设备?【英文标题】:Why does iOS bluetooth discover the same device more than once?为什么 iOS 蓝牙会多次发现同一设备? 【发布时间】:2015-01-13 20:37:01 【问题描述】:

我正在尝试使用以下语句发现心率监测器:

[self.centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:SERVICE_HR]] options:@@"CBCentralManagerScanOptionAllowDuplicatesKey":@NO ];

SERVICE_HR 定义为心率服务号。

当我阅读文档时,我给出的选项是将同一设备的所有发现合并到一个发现事件中。我正在扫描 2.2 秒,只有一个心率监测器可用,并获得 2 或 3 个发现。由于 HR 监视器每秒发布一次广告,因此如果每个广告都是单独“发现”的,那么这是有道理的。我收到以下回调 2 或 3 次:

 (void)centralManager:(CBCentralManager *)central
 didDiscoverPeripheral:(CBPeripheral *)peripheral
     advertisementData:(NSDictionary *)advertisementData
                  RSSI:(NSNumber *)RSSI

我将每个回调的数据保存到一个可变数组中。这是有两个发现的数组:

(lldb) po [RCLBTLE sharedBTLE].discoveredPeripherals
<__NSArrayM 0x17404bc70>(
<CBPeripheral: 0x1700f8180, identifier = 1DC9167F-6DB8-4216-5217-B1E8B2F3FB90, name = Polar H7 3F1DE71C, state = disconnected>,
<CBPeripheral: 0x1700f8180, identifier = 1DC9167F-6DB8-4216-5217-B1E8B2F3FB90, name = Polar H7 3F1DE71C, state = disconnected>
)

如您所见,同一个设备被发现了两次,但我认为它应该只被发现一次。我究竟做错了什么?还是我误会了什么?

【问题讨论】:

Corebluetooth central manager callback didDiscoverPeripheral twice 的可能重复项 好收获!我搜索但没有找到那个。唯一建议的答案是信号微弱,但我的信号就像 -55 dB 或 -60 dB 应该没问题。我正在重新启动手机以查看他们的其他建议答案,但即使解决了问题,问题仍然是为什么会发生?这是一个已知的 ios 错误吗? 我重启了手机,从手机中删除了应用程序,并“清理”了 Xcode,但同样的事情发生了。 这不是错误。它是关于当外围设备支持主动扫描时过滤额外的发现数据包。这个答案解释了它:***.com/a/11731243/2128900,进一步解释:lists.apple.com/archives/bluetooth-dev/2012/Apr/msg00047.html。即使将CBCentralManagerScanOptionAllowDuplicatesKey 设置为NO,您也会收到多个针对同一外设的委托回调。您只需要在将外围设备添加到数组之前检查它是否已经存在。 【参考方案1】:

指定扫描时使用以下代码

[self.centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:TRANSFER_SERVICE_UUID]] options: @CBCentralManagerScanOptionAllowDuplicatesKey : @NO ];

如果您将上述密钥指定为@YES,那么它会在看到设备时检测到设备。

【讨论】:

如果您仔细阅读原始问题,您会发现我正在使用您建议的代码,但我收到了多个回调。 但这是用于进行单/多检测的代码。发现外设后尝试为 centralmanager 调用 stopScan 并查看它是否仍在多次调用

以上是关于为啥 iOS 蓝牙会多次发现同一设备?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 蓝牙连接获取MAC地址的方法

为啥蓝牙 LE 不能从 iOS 模拟器到我的设备工作?

为啥我的 iOS 设备不扫描广告扩展程序?

iOS蓝牙未发现设备

为啥蓝牙搜索不到设备 ?

ios蓝牙api可以发现android设备吗?