频率总是最高的,因为他们被注册。
但是问题是:同步还是不同步?

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

我刚刚发现如果我要求陀螺仪数据为50Hz,加速度数据为20Hz,
总会有2 x 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;
    }
}

最佳答案

调用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级别11)开始,您还可以将延迟指定为绝对值(以微秒为单位)。
您可以参考doc以获得更多信息!!!

关于android - android中onSensorChanged的频率是多少?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25948629/

10-12 00:37