RxAndroidBle: Настройте уведомление, напишите характеристику и дождитесь продолжения уведомления - PullRequest
0 голосов
/ 20 ноября 2018

Я использую библиотеку Polidea RxAndroidBle для связи с устройством в моем приложении Android.

Я очень новичок в Реактивном программировании, поэтому я не могу точно понять, как сделать следующее:

  1. Уведомление о настройке в одной характеристике (Характеристика A).
  2. Когда настройка уведомления завершена, запишите другую характеристику (Характеристика B).Это вызовет уведомление, поступающее от признака A.
  3. Когда операция записи будет завершена, дождитесь прибытия уведомления в признаке A.
  4. Повторите те же шаги (1–3) для многихраз в разных частях приложения.

Я видел этот связанный ответ , но это делается с использованием первой версии библиотеки, и я не могу понять, каксделайте это, используя новую версию.

Спасибо.

1 Ответ

0 голосов
/ 24 ноября 2018

Я закончил выяснять это сам.Вот метод, который устанавливает индикацию или уведомление в характеристике, затем записывает некоторые байты в другую характеристику и возвращает Observable<String>, который испускает byte[], проанализированный в шестнадцатеричный String, которые были прочитаны в уведомлении / индикации.

Надеюсь, это поможет кому-то еще, ищущему это решение в RxJava2.

private Observable<String> writeAndReadOnNotification(UUID writeTo, UUID readOn,
                                                      String hexString,
                                                      boolean isIndication,
                                                      RxBleConnection rxBleConnection) {
    Observable<Observable<byte[]>> notifObservable =
            isIndication ?
                    rxBleConnection.setupIndication(readOn) :
                    rxBleConnection.setupNotification(readOn);
    return notifObservable.flatMap(
            (notificationObservable) -> Observable.combineLatest(
                    rxBleConnection.writeCharacteristic(writeTo, hexToBytes(hexString)).toObservable(),
                    notificationObservable.take(1),
                    (writtenBytes, responseBytes) -> bytesToHex(responseBytes)
            )
    ).take(1)
            .observeOn(AndroidSchedulers.mainThread())
            .doOnError(this::throwException);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...