我想以指定的速率读取方向传感器值,例如每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);
}
}
答案 0 :(得分:1)
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获得一次。