Датчик освещенности Android через RxJava - оптимизации
Я реализовал датчик освещенности, используя реализацию RxJava. я получил lux
значения правильно, но разброс очень велик. Например, даже когда устройство движется очень мало, значения меняются и излучаются через приемник датчика.
@NonNull
@Override
Observable<Boolean> createObservable(@NonNull Context context) {
SensorManager sensorManager = (SensorManager) context.getSystemService(
Context.SENSOR_SERVICE);
List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_LIGHT);
if (null == sensorList || sensorList.isEmpty()) {
throw new IllegalStateException("Unsupported Sensor: Device has no light sensor");
}
return SensorEventObservableFactory
.createSensorEventObservable(sensorList.get(0), sensorManager,
SensorManager.SENSOR_DELAY_NORMAL)
// Ambient light level in SI lux units
.map(sensorEvent -> sensorEvent.values[0])
// Make sure the lux value is valid
.filter(lx -> !(null == lx || lx < 0))
// Detect if light or dark environment
.map(lx -> {
Timber.d("new LX value = %s", lx);
// Over 15 lx means it is a light environment
// Bellow 15 lx means it is a dark environment
return lx > 15f;
})
.distinctUntilChanged();
}
Как я могу избежать этой проблемы? Я думал, что смогу добавить задержку между событиями, но это может привести к тому, что обнаружение будет не очень быстрым, а риск застрять в окружающем режиме велик. Я боролся с этим в течение нескольких часов, и у меня нет идей о том, как эффективно обнаруживать окружающий свет.
Заранее спасибо.