Objective C 中的蓝牙配对与连接
Bluetooth Pairing vs. Connection in Objective C
我正在构建一个连接到蓝牙设备的 iOS 应用程序,我注意到一旦 "connected" 我就可以使用委托方法 didDiscoverServices
;然而,当我实际上 "pair" 蓝牙设备时(弹出警告框并要求允许设备与 phone 配对),我无法再使用 didDiscoverServices
方法,或与 CBPeripheral
关联的其他方法。
我在调用 readValueForCharacteristic
方法时得到了 "pairing" 选项。然后我收到 "pairing" 请求。配对后,我无法探索设备的特性或服务。
相关代码如下:
- (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];
}
}
当您 read/write 一个需要加密的特性时,配对就会启动。配对过程使用新交换的密钥建立新连接,这会中断发现过程。
解决方案是在尝试读取操作之前完成服务和特征的发现。
我正在构建一个连接到蓝牙设备的 iOS 应用程序,我注意到一旦 "connected" 我就可以使用委托方法 didDiscoverServices
;然而,当我实际上 "pair" 蓝牙设备时(弹出警告框并要求允许设备与 phone 配对),我无法再使用 didDiscoverServices
方法,或与 CBPeripheral
关联的其他方法。
我在调用 readValueForCharacteristic
方法时得到了 "pairing" 选项。然后我收到 "pairing" 请求。配对后,我无法探索设备的特性或服务。
相关代码如下:
- (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];
}
}
当您 read/write 一个需要加密的特性时,配对就会启动。配对过程使用新交换的密钥建立新连接,这会中断发现过程。
解决方案是在尝试读取操作之前完成服务和特征的发现。