Android:计算设备方向的问题

前端之家收集整理的这篇文章主要介绍了Android:计算设备方向的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图建立一个简单的增强现实应用程序,所以我开始使用传感器数据.

根据该线程(Android compass example)和示例(http://www.codingforandroid.com/2011/01/using-orientation-sensors-simple.html),使用Sensor.TYPE_ACCELEROMETER和Sensor.TYPE_MAGNETIC_FIELD计算方向并不合适.

所以我不能得到“好”的价值. azimut值根本没有任何意义,所以如果我只是把手机上移,价值就会变化极大.即使我只是旋转手机,这些值并不代表手机的方向.

有人有想法,谁来按照给定的例子来提高价值质量?

解决方法

您使用这个示例应用程序是什么样的方向?从编写的这个代码,支持的唯一方向是纵向或平面在表上,这取决于设备. “好”是什么意思?

在旋转设备时,值不是“好”,正常情况下,设备坐标系应该在纵向工作,或平坦我不知道(Y轴垂直沿着屏幕向上,Z轴指出屏幕来自屏幕中心,X轴垂直于Y轴沿屏幕右侧).这样,旋转设备将不会旋转设备坐标系,您将不得不重新映射它.

但是,如果您想以纵向方向显示设备的标题,那么这是一段对我有用的代码

@Override
public void onSensorChanged(SensorEvent event)
{
    // It is good practice to check that we received the proper sensor event
    if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR)
    {
        // Convert the rotation-vector to a 4x4 matrix.
        SensorManager.getRotationMatrixFromVector(mRotationMatrix,event.values);
        SensorManager
                .remapCoordinateSystem(mRotationMatrix,SensorManager.AXIS_X,SensorManager.AXIS_Z,mRotationMatrix);
        SensorManager.getOrientation(mRotationMatrix,orientationVals);

        // Optionally convert the result from radians to degrees
        orientationVals[0] = (float) Math.toDegrees(orientationVals[0]);
        orientationVals[1] = (float) Math.toDegrees(orientationVals[1]);
        orientationVals[2] = (float) Math.toDegrees(orientationVals[2]);

        tv.setText(" Yaw: " + orientationVals[0] + "\n Pitch: "
                + orientationVals[1] + "\n Roll (not used): "
                + orientationVals[2]);

    }
}

你会得到标题(或方位角):

orientationVals[0]

猜你在找的Android相关文章