Прежде всего, спасибо Polidea за отличную библиотеку на основе ReactiveX для Android BLE (RxAndroidBle2)!
Когда я наткнулся на библиотеку, я полностью заменил использование BLE в своем приложении для Android на RxAndroidBle, и это избавило меня от многих проблем, связанных с BLE и Java BT API.Мое приложение предназначено для подключения и управления периферийным устройством BLE.Ниже я скопировал и скопировал свое использование RxAndroidBle в качестве примера из своего кода Java для Android.
И все же я не до конца понимаю, почему RxAndroidBle работает бесперебойно и хорошо с новыми моделями Android, тогда как у него есть проблемы со старыми моделями Android..
Проблема в том, что некоторые старые телефоны действительно могут сканировать и находить устройство, но не могут подключиться к периферийному устройству BT после нахождения нужного устройства.К устройствам, которые испытывают проблемы с подключением, относятся, например, Huawei P8 Lite (Android 6.0) и Asus Zenfone Go ZB500KL (Android 6.0).Этот же код прекрасно работает в новых устройствах.
Итак, мои вопросы:
Как узнать, в каких моделях телефонов или версиях Android библиотека RxAndroidBle2 должна быть 1.5.0работают так же, как и в> 6.0 версиях Android.
Почему сканирование работает всегда на всех устройствах Android> 5.0, но не на всех устройствах Android <= 6.0. </p>
Заранее благодарю за любые ответы!
Примеры из моего кода:
Сканирование ----
scanDisposable = rxBleClient.scanBleDevices(
new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES)
.build(),
new ScanFilter.Builder()
.setServiceUuid(new ParcelUuid(Globals.uuid_my_service))
.build()
)
.compose(bindUntilEvent(FragmentEvent.PAUSE))
.observeOn(AndroidSchedulers.mainThread())
.take(scanTimeMillis, TimeUnit.MILLISECONDS)
.doFinally(this::dispose)
.subscribe(this::addScanResult, this::onScanFailure);
Подключение----
connectionDisposable = bleDevice.establishConnection(false)
.compose(bindUntilEvent(PAUSE))
.flatMapSingle(connection ->
connection.discoverServices()
.flatMap(services -> services.getService(Globals.uuid_my_service))
.map(service -> service.getCharacteristic(Globals.uuid_program_characteristic))
.flatMap(characteristic -> connection
.writeCharacteristic(characteristic, programData))
)
.doFinally(this::dispose)
.subscribe(
characteristic -> {
Log.i(tag, characteristic.toString());
bluetoothResponses.msgToUserOnSuccess("\n" + "Success...");
atomicSuccess.set(true);
},
throwable -> {
bluetoothResponses.onConnectionFailure(throwable);
});