我正试图找出设备的旋转(三星Galaxy S5),我正在关注the method described in the documentation:
private float[] rawDeviceRotation;
private float[] rawDeviceAcceleration;
private float[] rawGeomagnetic;
private float[] rotationMatrix = new float[9];
float[] orientation = new float[3];
// ...
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
rawDeviceRotation = event.values.clone();
}
else if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
rawDeviceAcceleration = event.values.clone();
}
else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
rawGeomagnetic = event.values.clone();
if( SensorManager.getRotationMatrix(rotationMatrix, null, rawDeviceAcceleration, rawGeomagnetic) ){
SensorManager.getOrientation(rotationMatrix, orientation);
// orientation[0] ~ -0.62 <-> +0.62
// orientation[1] ~ -0.31 <-> +0.31
// orientation[2] ~ -0.62 <-> +0.62
}
}
}
我正在获取某些内容,但不是文档所声明的值。
方位角(围绕-z轴的旋转度)。这是设备当前罗盘方向与磁北极之间的角度。如果器件的上边缘朝向磁北,则方位角为0度;如果顶部边缘朝南,则方位角为180度。同样,如果上边缘朝东,方位角为90度,如果上边缘朝西,则方位角为270度。
间距(围绕x轴的旋转度)。这是平行于设备屏幕的平面与平行于地面的平面之间的角度。如果您将设备平行于地面,底边与您最接近,并将设备的顶边向地面倾斜,则俯仰角变为正。向相反方向倾斜 - 将设备的顶部边缘移离地面 - 导致俯仰角变为负。值的范围是-180度到180度。
滚动(绕y轴旋转的度数)。这是垂直于设备屏幕的平面与垂直于地面的平面之间的角度。如果您将设备平行于地面,底边最靠近您,并将设备的左边缘向地面倾斜,则滚动角度变为正值。向相反方向倾斜 - 将设备的右边缘朝向地面移动 - 导致滚动角度变为负值。值的范围是-90度到90度。
首先,我得到的值范围似乎与弧度或度数无关。
其次,滚动角度(或任何值),如果按照文档中的描述向左倾斜,则变为负,反之亦然。
要么我做错了什么,三星做错了什么,或者文档错了......任何想要责备的想法(以及如何解决它)?
我使用内置的三星测试屏测试了手机的传感器,只需在拨号盘中输入*#0*#
即可。它报告了正确的倾斜角度,通过了所有自检等,因此它似乎不太可能是硬件问题。我在这台设备上运行Android 4.4.2。
PS。我尝试在值上应用Math.toDegrees()
- 没有得到任何合理的值(没有90°
,180°
或类似的东西。)