我正试图用这句话发现心率监测器:
[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>
)
正如你所看到的那样,设备被发现了两次,但我认为应该只发现一次。我究竟做错了什么?或者我误解了什么?
答案 0 :(得分:0)
指定扫描时,请使用以下代码
[self.centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:TRANSFER_SERVICE_UUID]] options: @{CBCentralManagerScanOptionAllowDuplicatesKey : @NO }];
如果您将上述键指定为@YES,则会在看到设备时检测到该设备。