更快地重新连接 CBPeripheral

2024-03-19

我正在开发一个应用程序,它可以多次连接和断开不同的蓝牙低功耗外围设备。 经过在互联网上的大量研究,我没有找到一种方法来存储已经发现的服务和特征,以便我可以更快地重新连接。 目前,我正在每次重新连接后发现所需的服务和特征,这花费了我 1.5 到 2 秒的时间。

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

谢谢你的帮助


我尝试过在内存中缓存外围设备、服务和特征对象手动缓存不起作用。一旦与外围设备断开连接,服务和特征对象就不再有效。事实上,甚至 CBPeripheral 也可以在您的控制下发生变化 - CoreBluetooth 有一种内部行为,设备 UDID 每隔几分钟就会更改(如果 CBPeripheral 是另一个 iOS 设备)。

但是,如果您正在针对 iOS 6 进行开发,则有一种方法可以加快速度。如果你watch http://developer.apple.com/videos/wwdc/2012/在 WWDC 2012 的高级蓝牙演讲中,您将看到最后一张有关缓存服务和特性的幻灯片。本质上,操作系统可以为您缓存所有这些内容但仅适用于配对设备。要配对,您需要响应带有身份验证不足错误的写入请求。例如,对于 iOS 外设,您可以编写如下内容:

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

      [peripheralManager respondToRequest:request withResult:CBATTErrorInsufficientAuthentication];

      ...
}

iOS 外设上将会弹出一个配对对话框,之后您将被配对。除此之外,您不必更改代码 - 只需照常调用 discoveryServices 等,他们就会更快地响应(即立即)。

我还在 10.8.3 上测试了此行为,但它似乎不起作用。所以,我不知道有什么方法可以在 OS X 上加速(除了保持与外围设备的连接)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更快地重新连接 CBPeripheral 的相关文章

随机推荐