Я выполняю длинную операцию записи, отправляя пакеты по 16 байт за раз. Я хотел бы, чтобы индикатор выполнения показывал пользователю ход выполнения длинной записи, поэтому мне нужен какой-то обратный вызов для каждого раза, когда пакет был записан.
Судя по документации, это делает setWriteOperationAckStrategy
. Однако при запуске следующего кода я вижу только одно сообщение, выводимое в журнал. Что я здесь делаю неправильно?
subscription = connection.flatMap(rxBleConnection -> rxBleConnection.createNewLongWriteBuilder()
.setCharacteristicUuid(uuid)
.setBytes(bytes)
.setMaxBatchSize(16)
.setWriteOperationAckStrategy(new RxBleConnection.WriteOperationAckStrategy() {
@Override
public Observable<Boolean> call(Observable<Boolean> booleanObservable) {
Log.d("TEST", "batch written");
return booleanObservable;
}
})
.build()
setWriteOperationAckStrategy
похож на стандартные преобразователи Observable RxJava. Чтобы сохранить низкое распределение, мы склонны модифицировать исходный наблюдаемый объект, а не создавать новый после завершения каждой партии. Я изменил ваш пост с предложенным тестовым сценарием. - person pawel.urban   schedule 30.06.2017