2014-09-20 133 views
0

註冊頻率始終最高。 但問題是:同步還是不行?android中onSensorChanged的頻率是多少?

如果陀螺儀傳感器最多提供200HZ,加速度傳感器最多在我的手機提供50HZ, 那麼onSensorChanged函數提供陀螺儀數據4次然後加速數據1次?

我剛剛發現,如果我呼籲陀螺儀的數據爲50Hz和加速度數據20赫茲, 總會有相同的陀螺儀的數據由2 2

~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~ 第1部分:

public void initListeners(){ 
    mSensorManager.registerListener(this, 
     mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
     SensorManager.SENSOR_DELAY_FASTEST); 

    mSensorManager.registerListener(this, 
     mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE), 
     SensorManager.SENSOR_DELAY_FASTEST); 

    mSensorManager.registerListener(this, 
     mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), 
     SensorManager.SENSOR_DELAY_FASTEST); 
} 

2部分:

公共無效onSensorChanged(SensorEvent事件){

switch(event.sensor.getType()) { 
    case Sensor.TYPE_ACCELEROMETER: 
     // copy new accelerometer data into accel array and calculate orientation 
     System.arraycopy(event.values, 0, accel, 0, 3); 
     calculateAccMagOrientation(); 
     ... 
     } 
     break; 

    case Sensor.TYPE_GYROSCOPE: 
     // process gyro data 
     gyroFunction(event); 
     break; 

    case Sensor.TYPE_MAGNETIC_FIELD: 
     // copy new magnetometer data into magnet array 
     System.arraycopy(event.values, 0, magnet, 0, 3); 
     break; 
    } 
} 

回答

4

默認數據延遲(SENSOR_DELAY_NORMAL)是在調用registerListener()方法時指定的。數據延遲(或採樣率)控制傳感器事件通過onSensorChanged()回調方法發送到應用程序的時間間隔。默認數據延遲適用於監視典型的屏幕方向更改,並使用200,000微秒的延遲。您可以指定其他數據延遲,例如SENSOR_DELAY_GAME(20,000微秒延遲),SENSOR_DELAY_UI(60,000微秒延遲)或SENSOR_DELAY_FASTEST(0微秒延遲)。從Android 3.0(API Level 11)開始,您還可以將延遲指定爲絕對值(以微秒爲單位)。 你可以參考doc欲瞭解更多信息!