安卓 計步傳感器


概念及原理

計步傳感器介紹

    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計步功能初探 基於加速度傳感器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM