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

时间:2016-08-03 21:30:49

标签: android android-sensors

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

报告最多的解决方案是合并Sensor.TYPE_ACCELEROMETERSensor.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算法如何在内部完成它?

1 个答案:

答案 0 :(得分:1)

azimuth中的getOrientation是磁北极与设备y轴投影到世界x-y平面之间的角度。当设备达到90°时,投影是零矢量,因此在这种情况下方位角没有意义,可以是任何值。在物理上,试图找到磁北和指向天空的矢量之间的角度是没有意义的。 您应该在https://github.com/hoananguyen/dsensor/blob/master/dsensor/src/main/java/com/hoan/dsensor_master/DProcessedSensor.java

查看我的项目