gpt4 book ai didi

android - RobuSTLy 在 Android 上同时与多个 BLE 设备通信

转载 作者:可可西里 更新时间:2023-11-01 18:47:37 25 4
gpt4 key购买 nike

虽然没有记录,但使用 Android BLE api 的传统观点是,某些操作(如读/写特征和描述符)应该一次完成一个(尽管有些设备比其他设备更宽松)。但是,我不清楚该策略是应该仅适用于单个连接,还是适用于所有 Activity 连接。

我听说最好一次启动与一个设备的连接。这可能是应该在所有设备之间串行执行的操作 (connect/connectGatt) 的示例。

但是对于其他操作,比如读取和写入特征,如果每个连接串行执行操作是否足够好,或者我是否需要一些在所有设备之间共享的全局操作队列以便在所有设备之间只执行一个操作?

最佳答案

在 Android 上,每个 BluetoothGatt 对象您一次应该只执行一个操作(请求 mtu、发现服务、读/写特征/描述符),否则会出错。你必须等到相应的回调被调用,才能执行下一个操作。

关于同时与多个设备的挂起连接,如果您使用 autoConnect=true 则没有问题,但如果您使用 autoConnect=false 则 Android 的蓝牙堆栈将一次仅尝试连接到一个设备,这意味着如果有多个未完成的连接请求,它会将连接请求排入队列。有一个特殊的错误,它无法取消仍在队列中的挂起连接(当您调用 .disconnect() 或 .close() 时),但是,最近已在 Android 中修复。

请注意,还有最大数量的连接/挂起连接/gatt 对象,其行为完全未记录当您超过这些限制时会发生什么。在最好的情况下,你只是得到一个带有错误状态的回调,但在某些情况下,我已经看到 android 蓝牙堆栈陷入了一个无限循环,它在每次迭代中告诉蓝牙 Controller 连接到一个设备,但 Controller 发回错误代码已达到最大连接数。

关于android - RobuSTLy 在 Android 上同时与多个 BLE 设备通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28016571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com