在安卓系统中,onSensorChanged方法的频率是多少?

3

频率始终最高,因为它们已经注册。

但问题是:同步还是异步?

如果陀螺仪传感器在我的手机上提供最多200HZ,加速度传感器提供最多50HZ, 那么onSensorChanged函数会提供4次陀螺仪数据和1次加速度数据吗?

我发现如果我调用陀螺仪数据50Hz和加速度数据20 Hz, 总会有相同的陀螺仪数据2个2个出现。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Part1:

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);
}

公共空间 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;
    }
}
1个回答

10
默认数据延迟(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)开始,您还可以将延迟指定为绝对值(以微秒为单位)。 您可以参考文档获取更多信息!!!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接