美文网首页Android开发经验谈Android技术
Android获取手机方位角、姿态角、俯仰角终极方案

Android获取手机方位角、姿态角、俯仰角终极方案

作者: 胡氏一人 | 来源:发表于2019-05-25 08:54 被阅读5次

    最近在进行一个随记App,要求在拍摄图片的时候,记录拍摄瞬间手机的姿态,即方位角、姿态角、俯仰角。

    一开始在网上查了很多的资料,也看了官网的API基本都是用加速度和磁场传感器获取方位角,但涉及到横竖屏切换、如何得到正确的方位角、俯仰角、横滚角都没有相关介绍。

    作为一名测绘专业的开发者,将我的成果分享给需要的人。多谢支持

    以竖屏为例(先假定一个坐标系,图画的有点糙哈,请谅解):

    方位角:手机围绕Z轴旋转,正北方向为0度,顺时针旋转,方位角从0到360度变化,正北0度、正东90度,正南180度,正西270度。

    俯仰角:当手机xy轴所在的平面与地面平行时,此时俯仰角是0度,当手机围绕x轴旋转,且顶部离你越来越远,底部离你越来越近时(此时可以理解成,手机逐渐朝着地面拍摄),俯仰角从0到-90度变化;如果顶部离你越来越近,底部离你越来越远时(此时可以理解成,手机逐渐朝着天空拍摄),俯仰角从0到90度变化

    横滚角:当手机zy轴所在的平面与地面垂直时,此时横滚角是0度,手机围绕y轴旋转,若顺时针旋转,横滚角从0到90度变化。如果逆时针旋转,横滚角从0到-90度变化。

    横屏也是一样的,什么都不变,就是将图中的纵向矩形改成横向矩形,三个角度定义依然不变。

    上面三个角度已经解释的非常清楚啦,如果你还不明白,请加我QQ 623083313,备注写清楚。

    下面开始正题,直接上代码

    第1步,先注册传感器监听

    注册传感器监听

    监听代码如下

    监听部分

    第2步,注册的时候更新坐标系,这一步非常重要,就是兼容横竖屏需要做的,原理可以理解成横竖屏变化之后,坐标系的指向也需要变化,其中ROTATION_0表示正向竖屏,ROTATION_90表示正向横屏。

    另外如果你的手机横竖屏也发生了变化,也必须调用这个方法。

    其他两个方向的就不考虑的,毕竟把手机反过来使用的奇葩用户还是少的,直接忽略。

    坐标系的横竖屏调整

    你以为这样就完了,想多了,接下来是第三步

    第3步,得到三个角度值,并进行修正,横竖屏的修正方式不一样,请看if语句中的内容,这是我通过(华为8X和华为M2平板)测试总结出来的,亲测有效。经济实力有限,其他机型没有哈。

    如果你测试没有得到正确的结果值。请按照我说的去试验下,将手机或者平板大力反转+晃动+720度后空翻等操作,时间维持5秒,别以为我开玩笑,购买的新机器传感器需要初始化,或者说很长一段时间没有用的话,也需要初始化,这是我找了N个星期的资料,就差找华为硬件客服了,甚至一度认为是手机硬件问题,泪崩啊!

    横竖屏修改姿态角

    PS:你以为这样就完了,确实完了哈!但是这种情况你获取的角度值频率很快,浮动变化无常,还需要进一步优化哦,下篇文章会讲解,下周六见。

    我的QQ:623083313,非计算机专业的开发者

    相关文章

      网友评论

        本文标题:Android获取手机方位角、姿态角、俯仰角终极方案

        本文链接:https://www.haomeiwen.com/subject/gitazqtx.html