我正在开发一个应用程序,可以多次连接和断开不同的蓝牙低能耗外设。在互联网上进行了大量的研究之后,我还没有找到一种方法来存储已经发现的服务和特征,这样我就可以更快地重新连接。目前,我在每次重新连接后发现所需的服务和特征,这花费了我1.5到2秒的时间。
是否有人有存储/缓存CBService或CBCharacteristic的经验或解决方案,或者是否有人知道如何更快地重新连接?
谢谢你的帮助
发布于 2013-04-17 11:52:35
我尝试过在内存中缓存外围设备、服务和特征对象,手动缓存不起作用,。一旦您断开与外围设备的连接,服务和特征对象将不再有效。事实上,甚至CBPeripheral也可以在您的控制下更改- CoreBluetooth有一个内部行为,设备UDID每隔几分钟就会更改一次(如果CBPeripheral是另一个iOS设备)。
但是,如果您运行的是针对iOS 6的开发,则有一种方法可以加快速度。如果你在2012年的WWDC2012上使用watch进行高级蓝牙演讲,你会看到一张关于缓存服务和特性的幻灯片。本质上,操作系统可以为你缓存所有的,但只能为配对的设备缓存。要配对,你需要响应一个写请求,但没有足够的身份验证错误。例如,对于iOS外围设备,您可以编写如下代码:
- (void)peripheralManager:(CBPeripheralManager *)peripheralManager didReceiveWriteRequests:(NSArray *)requests {
...
[peripheralManager respondToRequest:request withResult:CBATTErrorInsufficientAuthentication];
...
}这将在iOS外围设备上弹出一个配对对话框,之后您将被配对。除此之外,你不需要像往常一样修改代码、调用- just、调用discoverServices等,它们的响应速度会更快(即即刻)。
我还在10.8.3上测试了这个行为,它似乎不起作用。所以,我不知道有什么方法可以在OS上提高速度(除了保持与外围设备的连接)。
发布于 2013-11-15 03:31:20
iOS 7增加了额外的缓存(iOS 7: What's New in Bluetooth LE)。我看到重新连接到外围设备、发现服务、发现特征和读取单个特征的值所需的总时间不到100ms (平均约80ms)。
我的测试配置是连接到iPad 3的iPad Air。
https://stackoverflow.com/questions/14870948
复制相似问题