Android 5旋转矢量传感器不准确

时间:2015-09-08 13:46:40

标签: android rotation android-sensors android-5.1.1-lollipop

我遇到了旋转传感器的问题,即TYPE_ROTATION_VECTOR类型的旋转传感器。传感器的读数似乎不准确,或者被某些东西打扰,我很难说。这是我用来获取设备实际旋转的代码:

public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
        if (prevRotMatrix == null) {
            prevRotMatrix = new float[16];
            SensorManager.getRotationMatrixFromVector(prevRotMatrix, event.values);
        } else {
            float[] deltas = new float[3];
            SensorManager.getRotationMatrixFromVector(rotMatrix, event.values);
            SensorManager.getAngleChange(deltas, rotMatrix, prevRotMatrix);

            rotXVal += (float) Math.toDegrees(deltas[1]);
            rotYVal += (float) Math.toDegrees(deltas[2]);
            rotZVal += (float) Math.toDegrees(deltas[0]);

            client.rotX(rotXVal);
            client.rotY(rotYVal);
            client.rotZ(rotZVal);

            System.arraycopy(rotMatrix, 0, prevRotMatrix, 0, rotMatrix.length);
        }
    }
}

rotXValrotYValrotZVal在开头都是零。
问题是,我得到的值会以某种方式受到干扰。设备移动通常由它们进行视觉化,但通常会显示一些无效值。通常当我在一个方向上旋转设备时,读数会显示有效的旋转,但之后会出现无效的反馈信息。向相反的方向,通常小于适当的运动。
重要的是,这种情况只发生在Android Lollipop设备(三星Galaxy S6)上。我也在KitKat上测试了这个(三星Galaxy Note 4),同样的代码工作得很好 我在运行this RotationVectorDemo时注意到了相同的行为。 Lollipop上的失真类型相同,但在KitKat上工作正常。

我想知道是否有人可以帮我弄清楚如何解决或解决问题。或者我应该放弃它并使用其他传感器?

0 个答案:

没有答案