频率总是在注册时最高。 但问题是:同步与否?
如果陀螺仪传感器最多可提供200HZ,则accel传感器在我的手机中最多可提供50HZ, 那么onSensorChanged函数提供陀螺仪数据4次,然后加速数据1次?
我刚刚发现我是否需要50Hz的陀螺仪数据和20 Hz的加速数据, 总是有相同的陀螺仪数据2乘2。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 第一部分:
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部分:
public void onSensorChanged(SensorEvent event){
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;
}
}
答案 0 :(得分:5)
在调用registerListener()方法时指定默认数据延迟(SENSOR_DELAY_NORMAL)。数据延迟(或采样率)控制传感器事件通过onSensorChanged()回调方法发送到应用程序的时间间隔。默认数据延迟适用于监视典型的屏幕方向更改,并使用200,000微秒的延迟。您可以指定其他数据延迟,例如SENSOR_DELAY_GAME(20,000微秒延迟),SENSOR_DELAY_UI(60,000微秒延迟)或SENSOR_DELAY_FASTEST(0微秒延迟)。从Android 3.0(API Level 11)开始,您还可以将延迟指定为绝对值(以微秒为单位)。 您可以参考doc获取更多信息!!!