尽管没有记录,但使用 Android BLE api 的传统观点是,某些操作(例如读/写特性和描述符)应该一次完成一个(尽管某些设备比其他设备更宽松)。但是,我不清楚此策略是否应仅适用于单个连接,还是适用于所有活动连接。
我听说最好一次启动与一个设备的连接。这可能是应该在所有设备之间串行执行的操作(connect / connectGatt)的示例。
但是对于其他操作,例如读取和写入特性,如果每个连接串行执行操作就足够了,还是我需要在所有设备之间共享一些全局操作队列,以便在所有设备之间只有一个操作正在执行?
在安卓上,每个 BluetoothGatt 对象您一次只能执行一项操作(请求 mtu、发现服务、读/写特征/描述符),否则会出错。您必须等到相应的回调被调用后才能执行下一步操作。
关于同时与多个设备的挂起连接,如果您使用 autoConnect=true 则没有问题,但如果您使用 autoConnect=false 则 Android 的蓝牙堆栈一次只会尝试连接到一台设备,这意味着它将排队如果有多个未完成的连接请求。有一个特定的错误,它无法取消仍在队列中的挂起连接(当您调用 .disconnect() 或 .close() 时),但是,最近在 Android 中修复了该错误。
请注意,还有一个最大数量的连接/挂起连接/gatt 对象,其行为完全没有记录,当超过这些限制时会发生什么。在最好的情况下,您只需得到带有错误状态的回调,但在某些情况下,我发现 Android 蓝牙堆栈陷入无限循环,在每次迭代中它都会告诉蓝牙控制器连接到设备,但控制器发回错误代码已达到最大连接数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)