安卓开发 --实现计步功能
关键代码
@OverridepublicvoidonSensorChanged(SensorEventevent){// 不是系统累计总步数if(event.sensor.getType()!=Sensor.TYPE_STEP_COUNTER)return;// 总步数longtotalSteps=(long)event.values[0];// 检查是否跨天StringcurrentDate=getTodayDate();StringtodayDate=MMKVUtils.decodeRecentUseDate();// 今天之前为止的步数longrecentSteps=MMKVUtils.decodeRecentSteps();// 计算今天的步数longtodaySteps=totalSteps-recentSteps;// 防止负数(设备重启等情况)if(todaySteps<0){// 同一天if(currentDate.equals(todayDate)){longsteps=MMKVUtils.decodeSteps();todaySteps=totalSteps+steps;}else{// 跨天todaySteps=totalSteps;MMKVUtils.encodeRecentUseDate(currentDate);}MMKVUtils.encodeRecentSteps(0);}else{// 跨天if(!currentDate.equals(todayDate)){longsteps=MMKVUtils.decodeSteps();todaySteps=totalSteps-recentSteps-steps;// 指针前移MMKVUtils.encodeRecentSteps(recentSteps+todaySteps);MMKVUtils.encodeRecentUseDate(currentDate);}}// 保存累计步数MMKVUtils.encodeSteps(todaySteps);// 发送广播更新UIsendStepUpdateBroadcast();Log.d(TAG,String.format("总步数: %d, 今日步数: %d",totalSteps,todaySteps));}分析
总共有四种情况:距离上一次打开应用并第一次移动手机未重启的情况下 是同一天(今天之内此刻之前打开过app) 或 不是同一天(也就是从昨天最后一次使用应用到此刻没有重启过),距离上一次打开应用并第一次移动手机重启过的情况下 是同一天(今天之内此刻之前打开过app并且重启过手机)或 不是同一天(今天之内此刻之前没打开过app且上一次打开app到现在重启过手机)。
