1. 程式人生 > >安卓 計步傳感器

安卓 計步傳感器

ech keep tlist 有效 android get chan service href

概念及原理

計步傳感器介紹

Android KitKat has added a few more hardware sensors to it’s API list. Step Sensors are one of them, which looks very promising. Although, not a lot of phones yet have these Step Sensors, in the future, this would gradually become a standard I think. Currently, Nexus 5 has them.

Step Counter: This keeps a count of the number of steps that you have taken. The counter is only reset when you re-boot the device, else, for every step you take (or the phone thinks you took, you counts up).

Step Detector: This sensor just detects when you take a step. That’s it.@link

Step counter sensor

TYPE_STEP_COUNTER:計步器(記錄歷史步數累加值)

這種類型的傳感器返回用戶自上次重新激活以來所采取的步驟數。 該值作為浮點數返回(小數部分設置為零),僅在系統重新引導時才將其重置為零。 事件的時間戳設置為采取該事件的最後一步的時間。 該傳感器以硬件實現,預計功耗低。 如果要持續跟蹤長時間的步數,請勿取消註冊該傳感器,以便即使AP處於掛起模式,也會在後臺繼續計數步驟,並且當AP處於掛起狀態時報告聚合計數 蘇醒。 應用程序需要保留該傳感器的註冊,因為如果沒有激活步進計數器不計數步驟。 該傳感器適用於健身跟蹤應用。 它被定義為REPORTING_MODE_ON_CHANGE傳感器。

Step detector sensor

TYPE_STEP_DETECTOR:檢測器(檢測每次步伐數據)

這種類型的傳感器每次用戶觸發一個事件。 唯一允許的返回值為1.0,並為每個步驟生成一個事件。 與任何其他事件一樣,時間戳表示事件(這裏是步驟)何時發生,這對應於當腳撞到地面時,產生加速度的高變化。 該傳感器僅用於檢測每個單獨的步驟,例如執行航位推算。 如果您只需要在一段時間內累積的步數,請註冊TYPE_STEP_COUNTER。 它被定義為REPORTING_MODE_SPECIAL_TRIGGER傳感器。@link

API部分

使用:@link
1、使用傳感器之前首先獲取SensorManager通過系統服務獲取:
SensorManager  mSensorManager 
= (SensorManager) getSystemService(SENSOR_SERVICE); 2、獲取我們需要的傳感器類型: //單次有效計步 Sensor mStepCount = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER); //系統計步累加值 Sensor mStepDetector = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR); 3、註冊監聽者(監聽傳感器事件) mSensorManager.registerListener(this, mStepDetector, SensorManager.SENSOR_DELAY_FASTEST); mSensorManager.registerListener(this, mStepCount, SensorManager.SENSOR_DELAY_FASTEST); PS:取消註冊: mSensorManager.unregisterListener(this, mStepDetector); mSensorManager.unregisterListener(this, mStepCount); 4、實現SensorEventListener接口,重寫方法並獲取數據: 從監聽到的傳感器事件中選取合適的類型,獲得數據: @Override public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == sensorTypeC) { //event.values[0]為計步歷史累加值 tvAllCount.setText(event.values[0] + "步"); } if (event.sensor.getType() == sensorTypeD) { if (event.values[0] == 1.0) { mDetector++; //event.values[0]一次有效計步數據 tvTempCount.setText(mDetector + "步"); } } }

參考:

Android計步模塊優化 項目應用

android-4-4-step-detector-and-counter

Android 計步功能-簡單實現

android計步功能初探 基於加速度傳感器

安卓 計步傳感器