作者:imjob1234_34706 | 来源:互联网 | 2023-05-26 10:53
虽然使用Android BLE apis的无证,传统智慧是某些操作,如读/写特征和描述符应该一次一个(虽然有些设备比其他设备更宽松).但是,我不清楚此策略是仅应用于单个连接还是应用于所有活动连接.
我听说最好一次启动一个设备连接.这可能是应该在所有设备之间串行执行的操作(connect/connectGatt)的示例.
但是对于其他操作,比如读写特性,如果每个连接串行执行操作,或者我是否需要在所有设备之间共享一些全局操作队列,以便在所有设备之间只执行一个操作?
1> Emil..:
在Android上,根据BluetoothGatt对象,您应该一次只执行一个操作(请求mtu,发现服务,读/写特性/描述符)否则会出错.您必须等到相应的回调被调用,直到您可以执行下一个操作.
关于同时连接到多个设备的连接,如果你使用autoCOnnect= true那么没有问题但是如果你使用autoCOnnect= false那么Android的蓝牙堆栈将只尝试一次连接到一个设备,这意味着它将入队连接请求是否有多个未完成的.有一个特殊的错误,它无法取消仍在队列中的挂起连接(当您调用.disconnect()或.close()时),但最近在Android中已修复.
请注意,还有一个最大数量的连接/挂起连接/ gatt对象,当您超出这些限制时,行为完全没有记录.在最好的情况下,你只是得到一个错误状态的回调,但在某些情况下,我已经看到android蓝牙堆栈卡在无限循环中,在每次迭代中它告诉蓝牙控制器连接到设备但控制器发回到达的错误代码最大连接数.