phone 重启后恢复计步器数据

Restore Step Counter data after phone reboot

我正在 java 中编写一个 android 应用程序,它使用 Android phone 的计步器传感器事件值来记录用户采取的步行步骤。 基本上我的 java 显示当前步骤的代码如下:

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

我每天使用 SharedPreferences 加载、保存和重置 previousTotalSteps。

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

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

所以,我自己解决了这个问题。我将此解决方案发布给遇到这种情况的任何其他人,以便它可以帮助他们解决问题。

为此,currentSteps 以及 previousSteps 需要在 each step[=24] 之后保存到 SharedPreferences =].之前只有 previousSteps 被保存,而且每天一次。

因此,totalSteps-previousSteps 将增加一个步骤以添加到 currentSteps。

如果 phone 重新启动,totalSteps 值将重置为零。如果发生这种情况(或者碰巧,如果 totalSteps 小于 previousSteps),那么在将两个变量应用于当前步数计算之前,previousSteps 值也将设置为等于 totalSteps 的条件。

 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));