diff --git a/src/main/java/de/dennisguse/opentracks/sensors/driver/BarometerInternal.java b/src/main/java/de/dennisguse/opentracks/sensors/driver/BarometerInternal.java index b200d1f09..c19997e41 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/driver/BarometerInternal.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/driver/BarometerInternal.java @@ -9,6 +9,8 @@ import android.util.Log; import androidx.annotation.NonNull; +import java.time.Duration; +import java.time.Instant; import java.util.concurrent.TimeUnit; import de.dennisguse.opentracks.data.models.AtmosphericPressure; @@ -17,12 +19,14 @@ public class BarometerInternal implements Driver { private static final String TAG = BarometerInternal.class.getSimpleName(); - private static final int SAMPLING_PERIOD = (int) TimeUnit.SECONDS.toMicros(5); + private static final Duration SAMPLING_PERIOD = Duration.ofSeconds(5); private final DriverObserver observer; private android.hardware.SensorManager sensorService; + private Instant lastEventTime = Instant.EPOCH; + private final SensorEventListener sensorEventListener = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { @@ -31,6 +35,13 @@ public class BarometerInternal implements Driver { return; } + Instant currentTime = Instant.now(); + + if (lastEventTime.plus(SAMPLING_PERIOD).isAfter(currentTime)) { + return; + } + + lastEventTime = currentTime; observer.onDataReceived(AtmosphericPressure.ofHPA(event.values[0])); } @@ -48,8 +59,9 @@ public class BarometerInternal implements Driver { public void connect(Context context, Handler handler, String addressIgnored) { sensorService = (android.hardware.SensorManager) context.getSystemService(Context.SENSOR_SERVICE); Sensor pressureSensor = sensorService.getDefaultSensor(Sensor.TYPE_PRESSURE); + int samplingPeriodUs = (int) TimeUnit.MICROSECONDS.convert(SAMPLING_PERIOD); - if (pressureSensor != null && sensorService.registerListener(sensorEventListener, pressureSensor, SAMPLING_PERIOD, handler)) { + if (pressureSensor != null && sensorService.registerListener(sensorEventListener, pressureSensor, samplingPeriodUs, handler)) { observer.onConnected(null, null); return; }