如何解决Android 计步器:计算活动持续时间
我开发了一款可以计算步数的计步器应用。我还需要用户活动的持续时间来说明例如今天用户步行了 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 举报,一经查实,本站将立刻删除。