android – 已弃用的Sensor.TYPE_ORIENTATION的等效替换

我正在寻找一种替代已弃用的
Android传感器Sensor.TYPE_ORIENTATION的解决方案.

报告最多的解决方案是组合Sensor.TYPE_ACCELEROMETER和Sensor.TYPE_MAGNETIC_FIELD,然后使用SensorManager#getRotationMatrix计算旋转矩阵,并使用SensorManager#getOrientation获取欧拉角.
另一个报告的解决方案是使用Sensor.TYPE_ROTATION_VECTOR,它也通过使用SensorManager#getOrientation以旋转矩阵和欧拉角结束

不幸的是,当旋转移动设备时,这些行为与TYPE_ORIENTATION完全不同.在手机放在桌面上然后将其调高(音高)至90°(屏幕现在直接朝向您)时尝试这两种类型.计算出的方位角和滚动的欧拉角变得非常狂野(导致称为Gimbal lock问题的原因),而使用TYPE_ORIENTATION检索的度数值非常稳定(不准确但非常好). TYPE_ORIENTATION的每个值(偏航,俯仰和滚动)似乎都是某种“投射”程度而没有万向节锁定问题.

如果不使用折旧的TYPE_ORIENTATION传感器(可能来自旋转矩阵),获得相似度数(偏航,滚动和俯仰)的方法是什么? TYPE_ORIENTATION算法如何在内部完成?

最佳答案 getOrientation中的方位角是磁北极与设备y轴投影到世界x-y平面之间的角度.当设备达到90°时,投影是零矢量,因此在这种情况下方位角没有意义,可以是任何值.在物理上,试图找到磁北和指向天空的矢量之间的角度是没有意义的.

你应该在
https://github.com/hoananguyen/dsensor/blob/master/dsensor/src/main/java/com/hoan/dsensor_master/DProcessedSensor.java看一下我的项目

点赞