簡體   English   中英

如何以固定頻率(例如,每20ms,40 ms或60 ms)從Android加速度傳感器獲取x,y,z值

[英]How to get x, y, z values from Android Accelerometer sensor on a regular frequency, for instance per 20ms, 40 ms or 60 ms

我正在開發一個Android項目,並遇到了以下情況:

  1. 現在,我們需要在常規頻率(例如20ms,40ms或60ms)上的加速度計值

  2. 現在我們現在是SENSOR_DELAY_GAME,但是我們發現不同的設備對此參數具有不同的間隔。 例如,G2使用40毫秒,G7使用60毫秒,而Nexus S使用20毫秒。

  3. 我嘗試設置計時器或使用thread.sleep,但是由於Java的GC問題,它們無法讓系統以常規頻率獲取值。

這很煩人,如果有人想說如果在Android SDK中,有一種適當的方法可以讓我以常規頻率獲取加速度計值,那將非常有幫助!

非常感謝!

通過設置以下采樣周期來使用registerListener

boolean registerListener (SensorEventListener listener, Sensor sensor, int samplingPeriodUs)

資源

溫馨提示samplingPeriodUs參數只是對系統的提示。 在使用它之前進行測試。

我通過簡單地丟棄比我想要的值還早的值來做到這一點。 從電池消耗的角度來看,這並不理想,因為我需要讓傳感器給我供電的次數比我需要的要多,但是至少我可以控制它們以固定的間隔進入。

就像是:

static final int ACCEL_SENSOR_DELAY = 100;  // the number of milisecs to wait before accepting another reading from accelerometer sensor
long lastAccelSensorChange = 0; // the last time an accelerometer reading was processed
@Override
public void onSensorChanged(SensorEvent sensorEvent) {


    if (sensorEvent.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE)  return;

    long now = System.currentTimeMillis();
    if (now-ACCEL_SENSOR_DELAY > lastAccelSensorChange) {
        lastAccelSensorChange = now;
        mCompassValues = event.values.clone();
        //... do your stuff
    }

我建立了一個代碼,使您可以在任何設備上獲得准確的頻率。

您可以在此處下載該項目並獲得一些說明。

在代碼中,您可以嘗試不同的費率。 例如,我的Galaxy S2的正常模式為5Hz。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM