RxAndroidBle2 работает по-разному при сканировании и подключении к моделям телефонов Android - PullRequest
0 голосов
/ 12 июня 2018

Прежде всего, спасибо 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).Этот же код прекрасно работает в новых устройствах.

Итак, мои вопросы:

  1. Как узнать, в каких моделях телефонов или версиях Android библиотека RxAndroidBle2 должна быть 1.5.0работают так же, как и в> 6.0 версиях Android.

  2. Почему сканирование работает всегда на всех устройствах 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);
            });

1 Ответ

0 голосов
/ 06 июля 2018

Как узнать, в каких моделях телефонов или версиях Android библиотека 1.5x RxAndroidBle2 должна работать так же, как и в> 6.0 версиях Android.

Вы неt - реализация BLE очень отличается от поставщика к поставщику, устройству, чипу и т. д. Слишком много комбинаций и слишком много ошибок, специфичных для устройства.

Почему сканирование работает всегда на всех устройствах Android> 5.0, но подключение не на всех устройствах Android <= 6.0. </p>

Некоторые реализации стека BLE содержат ошибки.Иногда они просто случайным образом терпят неудачу, но при повторной попытке все начинает работать.Иногда дополнительное время (~ 500 мс) между сканированием и подключением делает свое дело.

Huawei P8 Lite (6.0) имеет дрянную микросхему BLE, которая не обрабатывает сканирование и подключение одновременно.По-видимому, иногда служба NearbyMessageService из Google Play Services непрерывно сканирует в фоновом режиме и предотвращает успешное соединение.Эта ситуация может отображаться и на других производителях / устройствах.Как разработчик, вы ничего не можете с этим поделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...