RxAndroidBLE无需排队扫描操作即可执行BLE扫描

时间:2018-08-01 14:37:43

标签: android bluetooth-lowenergy rxandroidble

在我的应用程序中,我正在使用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

这是正确的预期行为吗?我可以以某种方式立即开始扫描操作而无需排队吗?

1 个答案:

答案 0 :(得分:1)

  

这是正确的预期行为吗?

是的,这是预期的行为。某些BLE堆栈实现无法很好地处理同时扫描和连接,这可能导致status=133It is still advised to not to do it

  

我可以以某种方式立即开始扫描操作而无需排队吗?

使用RxAndroidBle时,每个扫描操作都在主客户端队列中排队。考虑到以上警告,您可以尝试使用与autoConnect=true的连接,这样不会长时间阻塞主客户端队列。

或者,您可以使用香草Android API进行扫描。