Android设备轮播与文档

时间:2017-04-12 15:44:00

标签: android accelerometer android-sensors magnetometer

我正试图找出设备的旋转(三星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°或类似的东西。)

0 个答案:

没有答案