RxAndroidBle-我可以使用单个命令对特征进行可变数量的写入吗?

时间:2018-09-10 18:00:15

标签: android rx-android rxandroidble

我有一个包含多个数据的数组,这些数据需要写入相同的特征,但是我希望在整个过程完成时得到通知。

我可以通过如下遍历数组来完成写操作:

byte[][] dataArray = getDataArray();
for (byte[] values: dataArray) {
    rxBleConnection.writeCharacteristic(CHARACTERISTIC_UUID, values)
        .subscribe(bytes -> {
            // here I am notified after each individual write
        }, throwable -> {
            // handle error per write
        });
}

但是,该方法很慢,无法检测到整个写入过程何时完成。有没有办法以某种方式将写入合并在一起,以便我可以侦听整个写入事务的完成?

我不能使用Observable.merge,因为dataArray的大小可能可变且元素超过9个。

1 个答案:

答案 0 :(得分:1)

  

是否有某种方式可以将写操作组合在一起,以便我可以侦听整个写事务的完成情况?

是的,有办法。您可以将byte[][]转换为Observable<byte[]>,其排放将在.flatMap()中进行处理。然后,您只需要等待链的完成即可。即:

Observable.from(Arrays.asList(getDataArray()))
    .flatMap(values -> rxBleConnection.writeCharacteristic(CHARACTERISTIC_UUID, values))
    .ignoreElements() // transform to a `Completable` as you are interested only in the completion
    .subscribe(
        () -> { /* all values have been successfully written */ },
        throwable -> { /* an error happened during one of the writes */ }
    );