我有一个方法Observable<SensorEvent> dataFromSensor()
,它返回SensorEvents
的无限流。
我需要将它们收集到包含20个传感器事件的列表中。
我怎么能得到这个?
buffer(20)
不起作用,它会返回包含20个项目的列表,但此列表中的每个项目都相同。
更多代码:
使用RxSensors
final RxSensorManager sensorManager = new RxSensorManager(oldSensorManager);
sensorManager.observeSensor(Sensor.TYPE_ACCELEROMETER, SensorManager.SENSOR_DELAY_FASTEST)
.buffer(20)
.onSubscribe( /*onNext, onError, onCompleted omitted*/)
但如果我使用Observable.fromAsync()
和sensorManager回调或RxSensors
创建它,则没有区别。 onSubscribe
中的每个列表都有相同的项目。
答案 0 :(得分:1)
看起来SensorManager
每次都会更改相同的SensorEvent。
尝试在缓冲区之前添加相同的克隆。
例如:
sensorManager.observeSensor(Sensor.TYPE_ACCELEROMETER, SensorManager.SENSOR_DELAY_FASTEST)
.map(sensorEvent -> {
List<Float> copy = new ArrayList<>();
for (float value : sensorEvent.values) {
copy.add(value);
}
return copy;
})
.buffer(20)
.subscribe();