快速重新连接CBPeripheral

时间:2013-02-14 08:52:34

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

我正在开发一款应用程序,可以连接和断开多次不同的蓝牙低功耗外设。 经过对互联网的大量研究,我没有找到存储已发现的服务和特性的方法,这样我就可以更快地重新连接。 目前,我每次重新连接后都会发现所需的服务和特性,这需要花费1.5到2秒的时间。

是否有人有经验或解决方案来存储/缓存CBService或CBC特性,或者有人知道更快地重新连接的方法吗?

感谢您的帮助

2 个答案:

答案 0 :(得分:6)

我尝试在内存中缓存外围设备,服务和特征对象,手动缓存无法正常工作。从外围设备断开连接后,服务和特征对象将不再有效。实际上,即使是CBPeripheral也可以从你身下改变--CoreBluetooth有一个内部行为,设备UDID每隔几分钟就会改变一次(如果CBPeripheral是另一个iOS设备)。

但是,如果您正在为iOS 6运行开发,那么有一种方法可以加快速度。如果您在WWDC 2012上watch进行高级蓝牙演讲,您将看到有关缓存服务和特征的最终幻灯片。从本质上讲,操作系统可以为您缓存它们,但仅限于配对设备。要配对,您需要响应写入请求,并且验证错误不足。例如,对于iOS外围设备,您可以编写如下内容:

- (void)peripheralManager:(CBPeripheralManager *)peripheralManager didReceiveWriteRequests:(NSArray *)requests {
      ...

      [peripheralManager respondToRequest:request withResult:CBATTErrorInsufficientAuthentication];

      ...
}

这将弹出iOS外围设备上的配对对话框,之后您将进行配对。除此之外,您不必更改代码 - 只需正常调用discoverServices等,它们将更快地响应(即即时)。

我还在10.8.3上测试了这种行为,但它似乎不起作用。所以,我不知道如何在OS X上加快速度(除了保持与外围设备的连接)。

答案 1 :(得分:3)

iOS 7增加了额外的缓存(iOS 7: What's New in Bluetooth LE)。我发现重新连接外围设备,发现服务,发现特征以及读取单个特征值的时间不到100毫秒(平均约80毫秒)。

我的测试配置是连接到iPad 3的iPad Air。