我已经对此问题困扰了太久了。该代码应输出加速度计的dx,dy,dz和dx的总计。它还应输出方位角,俯仰和横滚。
I've used the information given here,但无济于事。
该代码无法正确输出俯仰,方位角或侧倾。对于最后三个文本 View ,它分别输出0.0,-0.0,-0.0。
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
accelerometerValues = event.values.clone();
case Sensor.TYPE_MAGNETIC_FIELD:
geomagneticMatrix = event.values.clone();
sensorReady = true;
break;
default:
break;
}
if (geomagneticMatrix != null && accelerometerValues != null && sensorReady) {
sensorReady = false;
float[] R = new float[16];
float[] I = new float[16];
SensorManager.getRotationMatrix(R, I, accelerometerValues, geomagneticMatrix);
float[] actual_orientation = new float[3];
SensorManager.getOrientation(R, actual_orientation);
tvXCoordinate.setText(accelerometerValues[0] + "");
tvYCoordinate.setText(accelerometerValues[1] + "");
tvZCoordinate.setText(accelerometerValues[2] + "");
floatXTotal += accelerometerValues[0];
tvXTotal.setText(floatXTotal + "");
tvAzimuth.setText(actual_orientation[0] + "");
tvPitch.setText(actual_orientation[1] + "");
tvRoll.setText(actual_orientation[2] + "");
}
最佳答案
我可能丢失了一些东西(并且您可能已经解决了这个问题),但是对我来说,您的switch语句似乎不正确:
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
accelerometerValues = event.values.clone();
case Sensor.TYPE_MAGNETIC_FIELD:
geomagneticMatrix = event.values.clone();
sensorReady = true;
break;
default:
break;
}
如果您的传感器事件是
TYPE_ACCELEROMETER
,则来自该事件的值将被克隆为accelerometerValues
和geomagneticMatrix
,并且sensorReady
将设置为true。我认为您可能需要更改此块的顺序,或者在第一种情况后可能需要添加break;
。关于java - 在Android 2.1中使用getRotationMatrix和getOrientation,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2963705/