SensorManager.getOrientation()出现问题

时间:2011-09-19 13:33:40

标签: android sensor device-orientation

n。android.view.onSensorChanged()的参考页面设备的轴被描述为

“X轴指的是屏幕的水平轴(纵向模式下的小边缘,横向模式中的长边)并指向右侧.Y轴指的是屏幕的垂直轴,指向屏幕的顶部。屏幕(原点位于左下角)。当设备背对着桌子时,Z轴指向天空。“

并且,在android.hardware.SensorManager.getOrientation()中,提到该方法将返回设备的方位角,俯仰和滚动,它们在逆时针方向上是正的。但是,当我从我的代码调用函数并打印值时,方位角和俯仰在顺时针方向上是正的,在逆时针方向上是负的。由android.hardware.SensorManager.getRotationMatrix()获得的旋转矩阵满足要求,如果我声称是正确的,即方位角和俯仰在顺时针方向是+ ve并且逆时针方向是+ ve方向。如果我错了,请纠正我。我正在使用HTC Wildfire S,它运行在Android 2.3.3上。

我正在添加代码段,我用它来获取方向值。

sensormanager =  (SensorManager)getSystemService(Context.SENSOR_SERVICE);
Sensor gsensor = sensormanager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
Sensor msensor = sensormanager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
sensormanager.registerListener(this, gsensor, SensorManager.SENSOR_DELAY_GAME);
sensormanager.registerListener(this, msensor, SensorManager.SENSOR_DELAY_GAME);

-------------------------------------------------------------------------------

final float rad2deg = (float)(180.0f/Math.PI);  
int type = event.sensor.getType();
float[] data;
if (type == Sensor.TYPE_ACCELEROMETER) {
    data = gravityValues;
} else if (type == Sensor.TYPE_MAGNETIC_FIELD) {
    data = geomagneticValues;
} else {
     return;
}
for (int i=0 ; i<3 ; i++)
    data[i] = event.values[i];

SensorManager.getRotationMatrix(rValues, null, gravityValues, geomagneticValues);
SensorManager.getOrientation(rValues, mOrientation);

result.setText("Compass yaw: " + (int)(mOrientation[0]*rad2deg) + "  pitch: " + (int)(mOrientation[1]*rad2deg) +"  roll: " + (int)(mOrientation[2]*rad2deg) );

如果我错过了提及任何必要的信息,请告诉我。提前谢谢。

1 个答案:

答案 0 :(得分:0)

文档是正确的,getOrientation调用中的Z轴指向地球。因此逆时针方向是正常意义上的顺时针方向。