我正在开发一个应用程序连接和断开几次不同的蓝牙低功耗外设。 经过在互联网上的大量研究,我没有找到一种方法来存储已经发现的服务和特征,以便我可以更快地重新连接。 目前,我在每次重新连接后发现所需的服务和特性,这会花费我1.5到2秒的时间。重新连接CBPeripheral更快
有人有经验或解决方案来存储/缓存CBService或CBCharacteristic或确实有人知道更快地重新连接的方法吗?
感谢所有帮助
我正在开发一个应用程序连接和断开几次不同的蓝牙低功耗外设。 经过在互联网上的大量研究,我没有找到一种方法来存储已经发现的服务和特征,以便我可以更快地重新连接。 目前,我在每次重新连接后发现所需的服务和特性,这会花费我1.5到2秒的时间。重新连接CBPeripheral更快
有人有经验或解决方案来存储/缓存CBService或CBCharacteristic或确实有人知道更快地重新连接的方法吗?
感谢所有帮助
我试过高速缓存外围,服务和存储特性的对象和手动缓存不起作用。一旦与外设断开连接,服务和特性对象就不再有效。事实上,即使CBPeripheral也可以从你下面更换 - CoreBluetooth有一个内部行为,其中设备UDID每隔几分钟就会更改一次(如果CBPeripheral是另一个iOS设备)。
但是,如果您正在运行iOS 6开发,则有一种方法可以加快速度。如果您在WWDC 2012上进行高级蓝牙通话,您将看到关于缓存服务和特性的幻灯片。本质上,操作系统可以将它们全部缓存为,但仅适用于配对设备。要进行配对,您需要对认证错误不足的写入请求做出响应。例如,对于在iOS周围,你会写是这样的:
- (void)peripheralManager:(CBPeripheralManager *)peripheralManager didReceiveWriteRequests:(NSArray *)requests {
...
[peripheralManager respondToRequest:request withResult:CBATTErrorInsufficientAuthentication];
...
}
这将弹出一个对话框配对在iOS周,在此之后,你会配对。除此之外,您不必更改代码 - 只需像正常情况调用discoverServices等,它们将更快(即时)响应。
我也在10.8.3上测试了这种行为,它似乎不起作用。所以,我不知道在OS X上加快速度的方法(除了保持与外设的连接)。
谢谢你的回答。我已经填写了一份错误报告,苹果告诉我,他们正在缓存服务和特性。但我已经用我的外设测试过了,我看到了相同的连接间隔。这种缓存仅适用于2个iOS设备还是第三方外设? – 2013-04-18 15:13:06
如果您使用第三方外设建立加密链接,它应该可以使用。自己没有测试过。 – 2013-04-23 18:33:44
它是一个加密的连接?因为目前我连接到我的外设没有任何加密 – 2013-04-25 20:45:25
iOS 7增加了额外的缓存(iOS 7: What's New in Bluetooth LE)。我看到,重新连接外设的时间少于100ms(平均约80ms),发现服务,发现特性并阅读单个特性的价值。
我的测试配置为一台iPad的空气连接到一台iPad 3
你问如何缓存在应用程序中的东西吗? – 2013-02-14 23:49:45
这将是缓存服务和特性的解决方案,但我已经尝试制作服务的副本。但不幸的是CBPeripheral,CBService和CBCharacteristic都没有采用NSCopying。有另一种方式来存储它们吗? – 2013-02-15 07:49:48
您可以将Pripheral放入数组中。您可以使用NSUserDefaults类 – 2013-02-19 12:23:28