在我的应用程序中,我正在使用RxAndroidBLE库。感谢出色的图书馆。但是我有一些问题。我正在尝试使用
连接到BLE设备 rxBleDevice.establishConnection(false)
设备超出范围。连接操作超时为30秒。同时,我想使用
查找其他设备 rxBleClient.scanBleDevices(scanSettings)
但是扫描操作会排队,并且将在连接操作超时(30秒)后执行。我可以在日志中看到此行为:
08-01 17:25:59.978 : QUEUED ConnectOperation(155884145)
08-01 17:25:59.981 : STARTED ConnectOperation(155884145)
08-01 17:25:59.989 : Connecting without reflection
08-01 17:26:15.585 : QUEUED ScanOperationApi21(75017989)
08-01 17:26:18.353 : onConnectionStateChange newState=0 status=133
08-01 17:26:18.361 : Connection operations queue to be terminated (C3:27:5F:B2:60:C9)
08-01 17:26:18.363 : Terminated.
08-01 17:26:18.370 : FINISHED ConnectOperation(155884145) in 18385 ms
08-01 17:26:18.377 : STARTED ScanOperationApi21(75017989)
08-01 17:26:18.379 : Scan operation is requested to start.
08-01 17:26:18.381 : QUEUED DisconnectOperation(41108292)
08-01 17:26:18.398 : FINISHED ScanOperationApi21(75017989) in 26 ms
08-01 17:26:18.401 : STARTED DisconnectOperation(41108292)
08-01 17:26:18.410 : FINISHED DisconnectOperation(41108292) in 10 ms
这是正确的预期行为吗?我可以以某种方式立即开始扫描操作而无需排队吗?
答案 0 :(得分:1)
这是正确的预期行为吗?
是的,这是预期的行为。某些BLE堆栈实现无法很好地处理同时扫描和连接,这可能导致status=133
。 It is still advised to not to do it。
我可以以某种方式立即开始扫描操作而无需排队吗?
使用RxAndroidBle
时,每个扫描操作都在主客户端队列中排队。考虑到以上警告,您可以尝试使用与autoConnect=true
的连接,这样不会长时间阻塞主客户端队列。
或者,您可以使用香草Android API进行扫描。