Я не могу найти свое устройство при использовании параметра CALLBACK_TYPE_ALL_MATCHES, но когда я изменяю этот параметр на CALLBACK_TYPE_FIRST_MATCH, результат будет таким, как ожидалось.
К сожалению, CALLBACK_TYPE_FIRST_MATCH не работает с некоторыми телефонами.
scanDisposable = rxBleClient.scanBleDevices(
ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES)
.build(),
ScanFilter.Builder()
.setServiceUuid(ParcelUuid(UUID_SERVICE))
.build()
)
?.observeOn(AndroidSchedulers.mainThread())
?.doOnDispose { }
?.subscribe(Consumer { scanResult ->
Log.d("Scan Result", scanResult.bleDevice.name + " - " + scanResult.bleDevice.macAddress)
},
Consumer<Throwable> { onScanFailure(it) })
Android Pixel может найти устройство с CALLBACK_TYPE_FIRST_MATCH, но не может с CALLBACK_TYPE_ALL_MATCHES.
Galaxy S5 Neo может найти устройство с CALLBACK_TYPE_ALL_MATCHES, а CALLBACK_TYPE_FIRST_MATCH отправить BleScanException.SCAN_FAILED_OUT_OF_HARDWARE_RESOURCES.
Спасибо, это очень помогает.
Вы нашли что-нибудь, что могло бы решить проблему отсутствия результатов с настройками CALLBACK_TYPE_ALL_MATCHES? Я пытаюсь решить эту проблему на прошлой неделе, пока не повезло.
Выполнение двух сканирований одновременно помогло ... Не очень доволен этим решением, но я думаю, что у меня нет выбора, и оно работает. Как только я нашел свое устройство, утилизирую оба скана.
Судя по тому, что вы пишете, возможно, вы могли бы решить свою проблему, используя оба варианта (конечно, вам нужно запустить два отдельных сканирования). В настоящее время я разрабатываю приложение для Bluetooth, и я сталкиваюсь с такой же проблемой, как и вы. Sony xperia полностью игнорирует рекламу, когда установлено значение CALLBACK_TYPE_ALL_MATCHES, и делает это даже без использования RxAndroidBle, поэтому я предполагаю, что проблема не в библиотеке RxAndroidBle.