簡體   English   中英

手機重啟后恢復計步器數據

[英]Restore Step Counter data after phone reboot

我正在 java 中編寫一個 android 應用程序,它使用 Android 手機的計步器傳感器事件值來記錄用戶的步行步數。 基本上我的 java 代碼顯示當前步驟如下:

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

我每天都在使用 SharedPreferences 來加載、保存和重置 previousTotalSteps。

我的問題是,當手機重新啟動時,來自 Step Counter Sensor 的totalSteps事件值會自動重置為零,因此它將我的currentSteps值變為負數,因為然后從零中減去previousTotalSteps值。 我想到的唯一解決方案是將 previousTotalSteps 也設置為零。 但它會破壞記錄每日步數的目的。 如果用戶在一天中重新啟動手機,那么半天的數據將丟失或以其他方式顯示為負數。 我還將這個每日步數值記錄到 sqlite 數據庫作為每日歷史記錄,以圖形方式顯示給用戶。 因此,這個負值也會進入 sqlite 數據庫並破壞歷史圖表。 我需要解決這個問題的建議。 我的重置數據代碼如下:

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

所以,我自己解決了這個問題。 我正在為發現自己處於這種情況的任何其他人發布此解決方案,以便它可以幫助他們解決它。

為此, currentSteps以及previousSteps需要在每個 step之后保存到 SharedPreferences 。 之前只保存了previousSteps ,而且每天保存一次。

因此, totalSteps-previousSteps將增加一個步長以添加到 currentSteps。

萬一手機重啟,totalSteps 值是 rest 為零。 如果發生這種情況(或任何機會,如果 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));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM