1

我想以指定的速率读取方向传感器值,例如每 100 毫秒。我怎样才能做到这一点以及如何指定 100 ms 的速率?我正在使用以下代码片段来读取方向传感器:

  final public SensorEventListener listener=new SensorEventListener() {
   public void onSensorChanged(SensorEvent e) {
    Log.d(TAG, "in sensor changed");

  if (e.sensor.getType()==Sensor.TYPE_ORIENTATION) {
      OrientationX=e.values[0];
      OrientationY=e.values[1];
      OrientationZ=e.values[2];
      message_orientation = "OrientationX ="+String.valueOf(OrientationX)+", OrientationY   ="+String.valueOf(OrientationY)+", OrientationZ ="+String.valueOf(OrientationZ);            
      Log.d(TAG, "Orientation value is "+message_orientation);
  }


}
4

2 回答 2

1

文档

mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);

SensorManager.SENSOR_DELAY_NORMAL 是速率

正如文档所解释的:

速率传感器事件的发送时间为。这只是对系统的提示。事件的接收速度可能比指定的速率快或慢。通常会更快地接收到事件。该值必须是 SENSOR_DELAY_NORMAL、SENSOR_DELAY_UI、SENSOR_DELAY_GAME 或 SENSOR_DELAY_FASTEST 之一。或者,事件之间的所需延迟(以微秒为单位)。

于 2012-12-28T18:47:01.290 回答
0

以下是基于测试结果的一些近似值:

Accelerometer, SENSOR_DELAY_FASTEST: 18-20 ms
Accelerometer, SENSOR_DELAY_GAME: 37-39 ms
Accelerometer, SENSOR_DELAY_UI: 85-87 ms
Accelerometer, SENSOR_DELAY_NORMAL: 215-230 ms
Orientation Sensor, SENSOR_DELAY_FASTEST: 16-17 ms
Orientation Sensor, SENSOR_DELAY_GAME: 37-39 ms
Orientation Sensor, SENSOR_DELAY_UI: 77 ms
Orientation Sensor, SENSOR_DELAY_NORMAL: 224-225 ms

您还可以定义自己的速率,例如 100 毫秒。

int READINGRATE = 100000 %time in us mSensorManager.registerListener(this, mLinearAccelerometer, READINGRATE);

然而,速率只是一个近似值,如果您需要准确的速率,最好使用计时器并每 100 毫秒获取一次值。

于 2014-01-29T21:17:58.617 回答