Датчик освещенности 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();
}

Как я могу избежать этой проблемы? Я думал, что смогу добавить задержку между событиями, но это может привести к тому, что обнаружение будет не очень быстрым, а риск застрять в окружающем режиме велик. Я боролся с этим в течение нескольких часов, и у меня нет идей о том, как эффективно обнаруживать окружающий свет.

Заранее спасибо.

0 ответов

Другие вопросы по тегам