在手机重新启动后恢复步骤计数器数据



我正在用java编写一个android应用程序,该应用程序使用android手机的Step Counter传感器事件值来记录用户所走的步数。基本上,我显示当前步骤的java代码如下:

if (running) {
totalSteps = event.values[0];
currentSteps = totalSteps - previousTotalSteps;
tv_stepsTaken.setText(String.valueOf(currentSteps));
}

我每天都在使用SharedPreferences加载、保存和重置以前的TotalSteps。

我的问题是,当手机重新启动时,步长计数器传感器的totalSteps事件值会自动重置为零,因此它会将我的currentSteps变为负,因为以前的totalSteps值会从零中减去。我想到的唯一解决方案是将以前的TotalSteps也设置为零。但它会破坏记录日常步伐的目的。如果用户在中午重新启动手机,那么半天的数据将丢失或以其他方式显示为负数。我还将这个每日步骤值记录到sqlite数据库中,作为每日历史记录以图形方式显示给用户。因此,这个负值也会进入sqlite数据库,破坏历史图。我需要建议来解决这个问题。我的重置数据代码如下:

previousTotalSteps = totalSteps;
tv_stepsTaken.setText("0");
saveStepsData();
return true;

所以,我自己解决了这个问题。我发布这个解决方案的任何其他人发现自己在这种情况下,这样它可能会帮助他们解决它。

为此,当前步骤以及以前的步骤个步骤之后保存到SharedPreferences。只有以前的步骤被保存,而且每天也保存一次。

因此,totalSteps previousSteps将向currentSteps增加一个步骤。

如果手机重新启动,totalSteps值将重置为零。如果发生这种情况(或者在任何情况下,如果totalSteps小于previousSteps(,则在将两个变量应用于当前步骤计算之前,previousSteps值也将设置为等于该条件的totalStep。

if (running) {
totalSteps = event.values[0];
loadCurrentStepsData();
loadPreviousStepsData();
if (totalSteps == 0 || totalSteps<previousSteps) {
previousSteps = totalSteps;
savePreviousStepsData();
}
currentSteps = currentSteps + (totalSteps - previousSteps);
previousSteps = totalSteps;
saveCurrentStepsData();
savePreviousStepsData();
}
tv_stepsTaken.setText(String.valueOf(currentSteps));

最新更新