Сканирование RXBle Start не работает на Android 10 (Huawei P30) - PullRequest
0 голосов
/ 20 апреля 2020

У меня проблема с запуском сканирования BLE на Huawei P30 с Android 10. Он работает на Huawei P20 с Android 9 и на многих других устройствах, но Android 10 странно. В приложении у меня есть кнопка «Начать сканирование», так что это сканирование во время работы приложения (без фонового сканирования). Когда я нажимаю эту кнопку, я вижу, что это состояние RxBleClient.State.READY и выполняется код внутри этого блока. К сожалению, код внутри подписки не вызывается. Странно то, что когда мобильный экран заблокирован, а затем разблокирован, начнется сканирование. То же самое происходит, когда BT выключается и снова включается

stateDisposable = rxBleClient.observeStateChanges().startWith(rxBleClient.state)
            // switchMap makes sure that if the state will change
            // the rxBleClient.scanBleDevices() will dispose and thus end the scan
            .switchMap<Any> { state ->
                stateSubject.onNext(convertState(state))
                when (state) {
                    RxBleClient.State.READY -> {
                        return@switchMap rxBleClient.scanBleDevices(
                            ScanSettings.Builder()
                                .setScanMode(ScanSettings.SCAN_MODE_BALANCED)
                                .build(),
                            ScanFilter.Builder()
                                .setServiceUuid(ParcelUuid(UUID.fromString(Constants.UUID_SERVICE_BATTERY)))
                                .build()
                        )
                    }
                    RxBleClient.State.BLUETOOTH_NOT_AVAILABLE,
                        // basically no functionality will work here
                    RxBleClient.State.LOCATION_PERMISSION_NOT_GRANTED,
                        // scanning and connecting will not work
                    RxBleClient.State.BLUETOOTH_NOT_ENABLED,
                        // scanning and connecting will not work
                    RxBleClient.State.LOCATION_SERVICES_NOT_ENABLED -> {
                        // scanning will not work
                        return@switchMap Observable.empty()
                    }
                }
            }
            .subscribe(
                { rxBleScanResult ->
                    println("XXX scan received")
                    if (rxBleScanResult is ScanResult) {
                        println("XXX scan received address: ${rxBleScanResult.bleDevice.macAddress}")                         
                        scanResultSubject.onNext(scanResults)
                    }
                },
                { throwable ->
                    println("Error when scanning BLE devices: $throwable")
                }
            )

Кто-нибудь знает, как это исправить?

...