我正在使用CoreBluetooth编译一个通过CBCentralManager
方法retrieveConnectedPeripheralsWithServices
提供“心率”服务的已连接设备的列表。
NSArray *services = @[[CBUUID UUIDWithString:BT_DEVICEINFO_SERVICE_UUID],
[CBUUID UUIDWithString:BT_HEARTRATE_SERVICE_UUID]];
NSArray *connectedDevices = [_centralMana retrieveConnectedPeripheralsWithServices:services];
这份清单包括我的CBPeripheral苹果手表,但一旦连接到connectPeripheral:
,这款外设就不能像下面的普通蓝牙心率监视器那样提供任何心率数据:
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
{
if ([service.UUID isEqual:[CBUUID UUIDWithString:BT_HEARTRATE_SERVICE_UUID]]) {
// Apple Watch peripheral never gets here.
for (CBCharacteristic *aChar in service.characteristics){
// Request heart rate notifications
if ([aChar.UUID isEqual:[CBUUID UUIDWithString:BT_HRMEASUREMENT_CHARACTERISTIC_UUID]]) {
[_currentDevice setNotifyValue:YES forCharacteristic:aChar];
}
}
}
}
我要做的是在连接Apple Watch之前识别它,这样我就可以把它从可用的心率设备列表中过滤出来。不幸的是,在连接之前,CBPeripheral似乎只提供字符串“名称”和"UUID“。
有谁知道在这里识别Apple Watch的方法,或者在retrieveConnectedPeripheralsWithServices
方法用法中过滤掉它?
发布于 2018-06-02 06:12:17
事实证明,我只需要意识到服务说明符属于OR搜索运算符。也就是说,它返回提供任何服务的设备,而不仅仅是提供所有服务的设备。
毕竟Apple Watch并没有为心率服务做广告!
https://stackoverflow.com/questions/50651552
复制相似问题