为什么iOS蓝牙不止一次发现同一个设备?

时间:2015-01-13 20:37:02

标签: ios bluetooth bluetooth-lowenergy core-bluetooth

我正试图用这句话发现心率监测器:

[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>
)

正如你所看到的那样,设备被发现了两次,但我认为应该只发现一次。我究竟做错了什么?或者我误解了什么?

1 个答案:

答案 0 :(得分:0)

指定扫描时,请使用以下代码

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

如果您将上述键指定为@YES,则会在看到设备时检测到该设备。