RxAndroidBle 多连接

RxAndroidBle multiple connections

背景:

我正在为 iOS 使用 RxAndroidBle library and have a requirement to quickly (as possible) connect to multiple devices at a time and start communicating. I used the RxBluetoothKit,并已开始在我的 Pixel 2 上使用 RxAndroidBle。这按预期工作,我可以与 6 建立连接-8 个设备,根据需要,在几百毫秒内。然而,将我的测试扩展到三星 S8 和 Nexus 6P 等手机,似乎建立一个连接现在可以花费 5-6 秒而不是 50-60 毫秒。我暂时假设这种差异存在于特定于供应商的 BT 实现中。最终,这意味着连接到例如 5 台设备现在需要 30 秒而不是 < 1 秒。

问题:

我从文档和其他问题中了解到,RxAndroidBle 将所有扫描、连接和通信请求排队,并串行执行它们以确保安全并根据蓝牙实现的多样性保持稳定性Android 生态系统。但是,目前是否有一种方法可以并行执行请求(即连接)以接受这种风险,并可能将我建立多个连接的总时间减少到连接时间最长的设备?

附带问题:是否有任何想法可以诊断可能需要 5 秒才能与设备建立连接?还是我们只需要接受某些手机在某些情况下会花费那么长时间?

However, is there currently a way to execute the requests (namely, connecting) in parallel to accept this risk and potentially cut my total time to establish multiple connections down to whichever device takes the longest to connect?

是的。您可以尝试使用 autoConnect=true 建立连接,这将防止锁定队列超过几毫秒。最后一个连接应以 autoConnect=false 开始以启动扫描。一些堆栈实现可以很好地处理这个问题,但您的情况可能会有所不同。

And side question: are there any ideas to diagnose what could possibly be taking 5 seconds to establish a connection with a device?

您可以查看Bluetooth HCI snoop log。您也可以尝试使用 BLE 嗅探器来检查实际发生的事情 "on-air"(例如 nRF51 开发套件)。

Or do we simply need to accept that some phones will take that long in some instances?

这也是一种选择,因为通常对于连接时间几乎无能为力。根据我的经验,BLE stack/firmware 实现之间存在很大差异。