如何使用SensorEventListener确定手机相对于磁北的方向

时间:2013-07-02 06:14:24

标签: android sensor android-sensors

我正在尝试编写一个实现SensorEventListener的类,以确定手机相机所朝向的方向(Galaxy S3),从磁北向东。以下是我正在使用的传感器:

  public void start()
  {
    mManager.registerListener(this, mManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_GAME);
    mManager.registerListener(this, mManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),  SensorManager.SENSOR_DELAY_GAME);
  }

我相信我正在寻找在调用mOrientation[0]后存储在SensorManager.getOrientation(mRotationMatrix, mOrientation);中的方位角。

然而,当我这样做时,结果似乎是绕重力旋转而不是从磁北旋转。我做错了吗?

1 个答案:

答案 0 :(得分:2)

您需要在致电remapCoordinateSystem(inR, AXIS_X, AXIS_Z, outR);之前致电getOrientation以获取后置摄像头的方向。然后azimuth是关于磁北的方向。 这相当于将设备坐标系的负Z轴投影到世界东北平面,然后计算投影矢量和北轴之间的角度。