我长期以来一直遇到这个问题。此代码应输出加速度计的dx,dy,dz以及dx的运行总和。它还应输出方位角,俯仰和滚动。
I've used the information given here,但无济于事。
此代码无法正确输出音高,方位角或滚动。它分别为最后三个文本视图输出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] + "");
}
答案 0 :(得分:6)
我可能会遗漏一些东西(你可能已经解决了这个问题),但对我来说,看起来你的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;
。
答案 1 :(得分:2)
你从getOrientation()获得0.0,-0.0,-0.0的原因是getRotationMatrix()并不总是得到有效的结果。您需要检查getRotationMatrix()的返回值,如果结果无效,则返回false;如果成功,则返回true。
补充:实际上,这并不是正确的。由于aganders指出的原因,你得到的结果无效。检查返回值只表示您实际上是在获得无效结果。