如何以指定的速率读取Android中的方向传感器数据?

时间:2012-12-28 18:32:16

标签: android multithreading orientation accelerometer sensor

我想以指定的速率读取方向传感器值,例如每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);
  }


}

2 个答案:

答案 0 :(得分:1)

来自the Documentation

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

SensorManager.SENSOR_DELAY_NORMAL是费率

正如documentation所解释的那样:

费率传感器事件在。这只是对系统的暗示。可以比指定的速率更快或更慢地接收事件。通常会更快地收到事件。该值必须是SENSOR_DELAY_NORMAL,SENSOR_DELAY_UI,SENSOR_DELAY_GAME或SENSOR_DELAY_FASTEST之一。或者,微秒事件之间所需的延迟。

答案 1 :(得分: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%时间   mSensorManager.registerListener(这个,mLinearAccelerometer,   READINGRATE);

然而,速率只是一个近似值,如果你需要一个准确的速率,最好使用一个定时器并每隔100ms获得一次。