我已经搜索了一下如何获得最精确的设备方位角,并想出了这个:
//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;
}
}
};
我尝试做的事情:实施所有关于如何获得最准确的方位角读数的最新指南:
TYPE_ORIENTATION:此传感器在Android 2.2(API级别)中已弃用 8)。传感器框架提供了另外的获取方法 设备方向,在使用方向中讨论 传感器
问题是所得到的方位角不准确,并且用several good devices进行了测试。
所以 - 也许我的实施中有一些SW错误?或者整个方法都错了?
谢谢,