RxAndroidBle - долго пишет и слушает характеристику уведомления - PullRequest
0 голосов
/ 11 декабря 2018

Я очень новый, когда дело доходит до пространства Android / BLE.Я пытаюсь написать характеристику и прослушать уведомление, используя библиотеку RxAndroidBle.Я посмотрел на многие реализации, которые кажутся достаточно разными, и я не могу заставить свой сценарий работать должным образом.Это сообщение: Нет данных уведомления при настройке записи / уведомления - это почти то, что мне нужно, однако, когда я использую опубликованный код, я не могу захватить какие-либо данные на моем периферийном устройстве, что, в свою очередь, не 'не возвращает ответ, так как я не отправляю ответ.Когда я переключаюсь на конструктор с длительной записью, я могу записывать на периферийное устройство и видеть поток данных, но по возвращении ответа от моего периферийного устройства в подписке на уведомления ничего не фиксируется.

Вот мой код:

 private void writeNotify(RxBleDevice peripheral, byte[] payload) {
    Disposable connectionSubscription = peripheral.establishConnection(false)
            .flatMap( // when the connection is available...
                    rxBleConnection -> rxBleConnection.setupNotification(UUID.fromString(notifyCharacteristic)), // ... setup the notification...
                    (rxBleConnection, notifyObservable) -> Observable.combineLatest( // ... when the notification is setup...
                            rxBleConnection.createNewLongWriteBuilder().setBytes(payload).setCharacteristicUuid(UUID.fromString(writecharateristic)).setMaxBatchSize(20).build(), // ... write the characteristic...
                            //rxBleConnection.writeCharacteristic(UUID.fromString(writecharateristic), payload).toObservable(), // ... write the characteristic...
                            notifyObservable, // ... and observe for the first notification on the AP_SCAN_DATA
                            (writtenBytes, responseBytes) -> responseBytes
                    )
            )
            .flatMap(observable -> observable) // ... flatMap the result as it is Observable<byte[]>...// ... and finish after first response is received to cleanup notifications
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(
                    responseBytes -> {
                        String data = new String(responseBytes);
                    },
                    throwable -> {

                    }
            );
}

Отдельно я попытался обработать это как 2 операции, где я настроил свою характеристику уведомления после выполнения длинной записи на мое периферийное устройство.Там, где я подписываюсь на метод наблюдатьConnectionStateChanges на моем периферийном устройстве, и жду, пока сработает состояние отключения, прежде чем настраивать характеристики уведомления.В этом сценарии я на самом деле могу получать частичные ответы, поэтому я знаю, что характеристика уведомления работает.Я просто не правильно это реализую.Есть предложения?

...