我正在寻找一种替代已弃用的Android传感器Sensor.TYPE_ORIENTATION
的解决方案。
最常见的解决方案是将Sensor.TYPE_ACCELEROMETER
和Sensor.TYPE_MAGNETIC_FIELD
组合起来,然后使用SensorManager#getRotationMatrix
计算旋转矩阵,并使用SensorManager#getOrientation
获取欧拉角。
另一个常见的解决方案是使用Sensor.TYPE_ROTATION_VECTOR
,也会得到旋转矩阵和使用SensorManager#getOrientation
获取欧拉角。
不幸的是,当旋转移动设备时,它们与TYPE_ORIENTATION
表现完全不同。在桌子上放置手机并将其向上(俯仰)旋转90度(屏幕现在直接面向您),尝试使用两种类型。方位角和横滚角的计算欧拉角变得非常混乱(因为某个称为万向锁问题),而使用TYPE_ORIENTATION
检索的度数值非常稳定(不准确但相当可靠)。TYPE_ORIENTATION
的每个值(偏航、俯仰和横滚)似乎都是一种“投影”度数,没有万向锁问题。
有什么方法可以在不使用已弃用的TYPE_ORIENTATION
传感器的情况下获得类似的度数(用于偏航、横滚和俯仰)(也许是从旋转矩阵中获取)?TYPE_ORIENTATION
算法在内部是如何处理的?