问题描述
我开发了一款可以计算步数的计步器应用。我还需要用户活动的持续时间来说明例如今天用户步行了 30 分钟。
我使用 sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)
来计算步数。在方法 onSensorChanged
中,您已经获得了(步骤)事件发生时的时间戳。我的目的是记住最后一个事件时间戳并在新事件进入时计算差异。这应该只在差异
https://developer.android.com/reference/android/hardware/SensorEvent#timestamp
StepCountService.java
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
if (sensorEvent.values != null) {
float stepsSinceBoot = sensorEvent.values[0];
boolean newSteps = stepCalculator.newStepsToday(); // Check if new steps exist
stepCalculator.updateStepsSinceBoot(stepsSinceBoot);
if (newSteps) {
float activeNanoseconds = activityDurationcalculator.activeNanoseconds(sensorEvent.timestamp); // Calculate activity duration
if (activeNanoseconds > 0) {
databaseRepository.updateActiveInMs(activeNanoseconds);
}
if (isScreenOn()) {
WidgetUpdater.updateWidget(getApplicationContext());
}
}
}
}
ActivityDurationcalculator.java
public class ActivityDurationcalculator {
private long firstActiveTimestamp;
private long lastActiveTimestamp;
public float activeNanoseconds(long eventTimestamp) {
if (firstActiveTimestamp == 0) {
firstActiveTimestamp = eventTimestamp;
}
if (lastActiveTimestamp > 0 && lastActiveTimestamp != firstActiveTimestamp && eventTimestamp - lastActiveTimestamp < TimeUnit.NANOSECONDS.convert(1,TimeUnit.SECONDS)) {
float activeNanoseconds = lastActiveTimestamp - firstActiveTimestamp;
firstActiveTimestamp = eventTimestamp;
lastActiveTimestamp = eventTimestamp;
return activeNanoseconds;
}
lastActiveTimestamp = eventTimestamp;
return 0;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)