目标C中的蓝牙配对与连接

时间:2015-01-15 20:51:40

标签: ios objective-c bluetooth bluetooth-lowenergy core-bluetooth

我正在构建一个连接到蓝牙设备的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];
    }

} 

1 个答案:

答案 0 :(得分:3)

当您读取/写入需要加密的特征时,将启动配对。配对过程使用新交换的密钥建立新连接,这会中断发现过程。

解决方案是在尝试读取操作之前完成服务和特性的发现。