[英]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.