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看一下我的项目

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...