我正在构建一个连接到蓝牙单元的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/

10-12 04:55