2016-08-03 203 views
3

我正在寻找替代已弃用的Android传感器Sensor.TYPE_ORIENTATION的解决方案。已弃用的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

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

+0

如何检测正确的方向和旋转风景/肖像? –

相关问题