我正在尝试编写一个实现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);中。

但是,当我这样做时,结果似乎是围绕重力旋转,而不是从磁北旋转。难道我做错了什么?

最佳答案

您需要先调用remapCoordinateSystem(inR, AXIS_X, AXIS_Z, outR);,然后再调用getOrientation以获取后置摄像头的方向。那么azimuth是相对于磁北的方向。
这等于将设备坐标系的负Z轴投影到世界东西平面,然后计算投影向量与北轴之间的角度。

关于android - 如何使用SensorEventListener确定电话相对于磁北的朝向,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17418599/

10-10 13:31