Objective C 中的蓝牙配对与连接

Posted

技术标签:

【中文标题】Objective C 中的蓝牙配对与连接【英文标题】:Bluetooth Pairing vs. Connection in Objective C 【发布时间】:2015-01-15 20:51:40 【问题描述】:

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

 

【问题讨论】:

您应该在尝试读取特征之前完成服务和特征的发现 @Paulw11 我相信这解决了我的问题。谢谢!如果你想让它成为答案,我会接受。 【参考方案1】:

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

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

【讨论】:

非常感谢!这解决了我的问题。不幸的是,文档中没有太多关于此的内容。干杯。 是的,Core 蓝牙编程指南在配对/加密部门的细节上非常简单

以上是关于Objective C 中的蓝牙配对与连接的主要内容,如果未能解决你的问题,请参考以下文章

手机蓝牙与手机蓝牙连接时不弹出配对码对话框

Android蓝牙协议-蓝牙配对与连接

win10蓝牙已配对手柄,但无法自动连接,也没有连接按钮?

安卓系统 蓝牙 与车载蓝牙的连接

Android蓝牙开发——经典蓝牙:配对与解除配对 & 实现配对或连接时不弹出配对框

如何将不需要pin的蓝牙设备与android配对