乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Android 計步模塊(類似微信運動)

       codingSmart 2021-10-22

      前言

      目前 Android 計步兩種方式

      在 Android4.4 版本之后,部分機型實現(xiàn)了 Sensor.TYPE_STEP_COUNTER 傳感器,用于紀錄用戶行走的步數(shù)。從手機開機開始紀錄,手機關(guān)機時重置為 0。
      這個記步芯片是系統(tǒng)級別的,相對之前老版本的傳感器記步,性能有一些優(yōu)化:
      不會因為 App 單獨用了記步的功能而額外耗電
      系統(tǒng)芯片記步是持續(xù)的,能夠優(yōu)化部分機型后臺不記步的問題。

      加速度傳感器計算方式

      加速度傳感器非常耗電,導(dǎo)致 App 的耗電量很高,影響用戶體驗。
      需要后臺實時運行才能實現(xiàn)記步的功能,如果 App 進程被系統(tǒng)或者安全軟件殺死,導(dǎo)致記步功能沒辦法使用。

      實現(xiàn)以及使用

      項目地址:https://github.com/jiahongfei/TodayStepCounter

      根據(jù)以上兩種方式實現(xiàn)計步,手機提供計步傳感器就使用Sensor.TYPE_STEP_COUNTER方式(app 后臺關(guān)閉也可以計步,但是部分手機也不支持,請看第二篇),如果不提供就使用Sensor.TYPE_ACCELEROMETER方式(app 需要保持后臺運行)。

      項目結(jié)構(gòu):

      計步 Service 使用單獨進程,所以使用到進程間通信 aidl,todaystepcounterlib 為庫文件用于在單獨進程中實現(xiàn)計步算法,app 依賴todaystepcounterlib 項目獲取當前步數(shù)展示。

      接入方式:

      項目結(jié)構(gòu) app 中時如何使用計步模塊的看如下代碼

      public class MainActivity extends AppCompatActivity {

         private static String TAG = "MainActivity";
         private static final int REFRESH_STEP_WHAT = 0;
         //循環(huán)取當前時刻的步數(shù)中間的間隔時間
         private long TIME_INTERVAL_REFRESH = 500;
         private Handler mDelayHandler = new Handler(new TodayStepCounterCall());
         private int mStepSum;
         private ISportStepInterface iSportStepInterface;
         @Override
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_main);
             Intent intent = new Intent(this, VitalityStepService.class);
             startService(intent);
             bindService(intent, new ServiceConnection() {
                 @Override
                 public void onServiceConnected(ComponentName name, IBinder service) {
                     iSportStepInterface = ISportStepInterface.Stub.asInterface(service);
                     try {
                         mStepSum = iSportStepInterface.getCurrTimeSportStep();
                         updateStepCount();
                     } catch (RemoteException e) {
                         e.printStackTrace();
                     }
               mDelayHandler.sendEmptyMessageDelayed(REFRESH_STEP_WHAT, TIME_INTERVAL_REFRESH);
                 }
                 @Override
                 public void onServiceDisconnected(ComponentName name) {
                 }
             }, Context.BIND_AUTO_CREATE);
         }
         class TodayStepCounterCall implements Handler.Callback{
             @Override
             public boolean handleMessage(Message msg) {
                 switch (msg.what) {
                     case REFRESH_STEP_WHAT: {
                         if (null != iSportStepInterface) {
                             int step = 0;
                             try {
                                 step = iSportStepInterface.getCurrTimeSportStep();
                             } catch (RemoteException e) {
                                 e.printStackTrace();
                             }
                             if (mStepSum != step) {
                                 mStepSum = step;
                                 updateStepCount();
                             }
                         }
               mDelayHandler.sendEmptyMessageDelayed(REFRESH_STEP_WHAT, TIME_INTERVAL_REFRESH);
                         break;
                     }
                 }
                 return false;
             }
         }
         private void updateStepCount() {
             Log.e(TAG,"updateStepCount : " + mStepSum);
             TextView stepTextView = (TextView)findViewById(R.id.stepTextView);
             stepTextView.setText(mStepSum + "步");
         }
      }

      計步策略

      1.如果使用加速度傳感器計步必須要 app 在后臺存活才可以計步。'
      2.重頭戲是使用計步傳感器實現(xiàn)計步,app 在后臺關(guān)閉也可以計步。

      如下是采用 Sensor.TYPE_STEP_COUNTER 傳感器實現(xiàn)計步策略:
      1. 用戶新安裝 app,從用戶第一次打開 App 開始計步,當天不跨天

      2. 用戶一直打開app計步,且跨越0點沒有關(guān)閉App

      3.用戶打開一次App后臺關(guān)閉,跨越0點且0點分隔AlertManager不能自啟動(目前多數(shù)手機都是不能啟動的)

      4.用戶打開一次app后臺關(guān)閉,跨越多個0點且Alertmanager 0點分隔可以啟動

      5.用戶開啟一次app且在同一天進行重啟手機(自啟動不好用,很多手機不好用)

      6.用戶開啟一次app,開關(guān)機跨0點(開機自啟動不好用)

      7.用戶開啟一次app,開關(guān)機跨0點(開機自啟動可以)

      缺陷 注意

      缺陷

      1.方案三 跨 0 點打開 app 步數(shù)算 前一天的,如果跨越多天會導(dǎo)致前一天步數(shù)非常大。
      2.方案四 跨 0 點之前的步數(shù)會丟失(由于 0 點分隔 AlertManager 可以回調(diào),所以可以處理 0 點之前的數(shù)據(jù),以后版本在修復(fù)吧)
      3.在計步器回調(diào)中頻繁調(diào)用 SharePreference 費電

      注意:

      1.每天早上打開 App 可以提高幾步精度,和微信步數(shù)幾乎一致。
      2.每次重啟手機請打開 app,會合并步數(shù)

      與之相關(guān)

      Android 選擇圖片上傳功能【支持多選拍照預(yù)覽等】

      Android 模仿微信選擇圖片

      關(guān)鍵詞:code小生

        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多