我正在使用 Android 重力和磁场传感器通过 SensorManager.getRotationMatrix 和 SensorManager.getOrientation 计算方向。这给了我方位角、俯仰角和方向数字。当设备平放在桌子上时,结果看起来很合理。
但是,我在清单中禁用了纵向和横向之间的切换,因此 getWindowManager().getDefaultDisplay().getRotation() 始终为零。当我将设备旋转 90 度使其垂直站立时,我遇到了麻烦。有时数字看起来很不对劲,我意识到这与Gimbal lock有关。但是,其他应用程序似乎没有这个问题。例如,我将我的应用程序与两个免费的传感器测试应用程序(Sensor Tester (Dicotomica)和Sensor Monitoring (R's Software))进行了比较。当设备平放时,我的应用程序与这些应用程序一致,但当我将设备旋转到垂直位置时,可能会有显着差异。这两个应用程序似乎彼此一致,