Android:获取准确的方位角

mic*_*ael 5 android rotational-matrices android-sensors sensormanager

我已经搜索了一段时间关于如何获得最准确的设备方位角并想出了这个:

//Activity members
private SensorManager sensorManager;
private float mAzimuth = 0.0f;
private float[] mRotation = null;
private float rMat[] = new float[16];
private float orientation[] = new float[3];
//Later inside the Activity: Rotation Listener
SensorEventListener rotationListener = new SensorEventListener() {
    public void onAccuracyChanged(Sensor sensor, int accuracy) {}
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
            mRotation = event.values.clone();
            if (mRotation != null) {
                float RmatVector[] = new float[16];
                SensorManager.getRotationMatrixFromVector(RmatVector, mRotation);
                SensorManager.remapCoordinateSystem(RmatVector, SensorManager.AXIS_X, SensorManager.AXIS_Z, rMat); 
                SensorManager.getOrientation(rMat, orientation);
                mAzimuth = (float)Math.toDegrees((double)orientation[0]);  //azimuth
                if (mAzimuth < 0) {
                    mAzimuth = 360 + mAzimuth;
                }   
            }
            mRotation = null;
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

我试图做的:实施所有有关如何获得最准确方位角读数的最新指南:

  1. 测试时我很清楚这一切(校准、电气设备偏置等)
  2. 也可以在我实现这个谷歌建议的代码中看到:

TYPE_ORIENTATION:此传感器在 Android 2.2(API 级别 8)中已弃用。传感器框架提供了获取设备方向的替代方法,在使用方向传感器中讨论了这些方法。

问题是产生的方位角不是很准确,并且已经用几个好的设备进行了测试

所以 - 也许我的实现中有一些软件错误?还是整个方法都错了?

谢谢,