快速重新连接CBPeripheral

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

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

谢谢你的帮助

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

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

 - (void)peripheralManager:(CBPeripheralManager *)peripheralManager didReceiveWriteRequests:(NSArray *)requests { ... [peripheralManager respondToRequest:request withResult:CBATTErrorInsufficientAuthentication]; ... } 

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

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

iOS 7增加了额外的缓存( iOS 7:蓝牙LE的新function )。 我看到总重新连接到外围设备,发现服务,发现特征和读取单个特征的值的时间少于100毫秒(平均约80毫秒)。

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