我正在构建一个连接到蓝牙单元的iOS应用,我注意到,一旦“连接”起来,我就可以使用委托方法didDiscoverServices
;但是,当我查看并实际“配对”蓝牙设备时(弹出一个警告框,要求允许该设备与手机配对),我不再能够使用didDiscoverServices
方法或与该方法关联的其他方法CBPeripheral
。
当我调用readValueForCharacteristic
方法时,我得到了“配对”选项。然后,我得到了“配对”请求。配对后,我将无法浏览设备的特性或服务。
以下是相关代码:
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error
{
for (CBService *service in peripheral.services) {
NSLog(@"Discovered service %@", service.UUID);
[services addObject:service.UUID];
[peripheral discoverCharacteristics:nil forService:service];
}
}
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
{
for (CBCharacteristic *characteristic in service.characteristics) {
NSLog(@"Discovered characteristic: %@", characteristic.UUID);
NSLog(@"Discovered characteristic Properties: %@", characteristic.service);
[peripheral readValueForCharacteristic:characteristic];
}
}
最佳答案
当您读/写需要加密的特征时,将启动配对。配对过程使用新交换的密钥建立新连接,这会中断发现过程。
解决方案是在尝试读取操作之前完成对服务和特征的发现。
关于ios - objective-c 中的蓝牙配对与连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27972757/