[英]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項目,並遇到了以下情況:
現在,我們需要在常規頻率(例如20ms,40ms或60ms)上的加速度計值
現在我們現在是SENSOR_DELAY_GAME,但是我們發現不同的設備對此參數具有不同的間隔。 例如,G2使用40毫秒,G7使用60毫秒,而Nexus S使用20毫秒。
我嘗試設置計時器或使用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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.