关于Android的方向传感器
先铺出一列参考文,我觉得都不错的,虽然我要的功能很简单的说。最后补充上自己备忘的一小点内容
《android 方向传感器》 http://hi.baidu.com/dean_wang/blog/item/7662a8f8e5efe3c4b58f312b.html
《深入探讨 Android 传感器》http://www.ibm.com/developerworks/cn/opensource/os-android-sensor/
《官方文档》http://developer.android.com/reference/android/hardware/SensorManager.html
《Android Orientation Sensor tutorial》http://blog.androgames.net/135/android-orientation-tutorial/
《Android方向传感器实践——自己动手做水平尺》http://blog.csdn.net/tinya0913/article/details/6095307
ok,图文我都借用了一下.,
也就是说,当你把手机水平放置在桌面上(屏幕向上)且手机指向正北(Y轴方向),此时传感器获得的xyz三个值应该都为0。
以上是我在较早一段时间前已经掌握到的知识。
现在我的疑问是,我手头有个项目需要用户以DC的姿势握持设备(横握x轴向上,z轴屏幕面向用户),这个时候,传感器对xyz三轴的定义会否变化呢?
代码如下:
1. 首先修改 Manifest.xml,使应用以横屏显示
<activity android:name=" SensorTest "android:label="@string/app_name"
android:screenOrientation="landscape">
2. 再看源码,加入方向传感器的部分
... ...
//方向传感器,获取lisener在onResume()
mSM = (SensorManager)getSystemService(SENSOR_SERVICE);
... ...
}
//输出调试信息至app的标题栏
setTitle(“x,y,z:("+x+","+y+","+z+")”);
}
}
//-----------以上代码省略了不少无关的东西----------------
为Class SensorTest 添加 implements SensorEventListener 后,eclipse 提示自动补充了两个方法
public void onAccuracyChanged() 这是当传感器的精度改变时触发的,我暂时还用不上
和 public void onSensorChanged() 这个是我需要的,获得三轴角度的数据,具体用法见上例
这个时候还不能得到数据,还需要为 SensorManager 设置一个Listener, 具体见 onResume() ;
相应地,我还在onPause() 对这个Listener 注销。
ok,那么就可以试运行了,横握手机水平稳定地改变方向,发现变更数值的是x轴值。
很郁闷的是读数和上文的x轴定义不一样,当我机背摄像头正对东面的时候x显示0??.. 0不是应该是正北么?
试了不同的方向,发现角度都有恒定的90的偏差值....(这不是误差吧?大吃一斤)
修改了一下Manifest,改成竖屏,这下x的值变得更怪了..很飘~而且读不懂和横屏之间的数值差异
... ... 苦思片刻...茅塞顿开,我擦!我已开始对上面第一段xyz轴的读数理解错了!
x的确是方向,作为罗盘时正确放置或握持方式是像上文所说的水平屏幕朝上,手机顶部指示(沿y轴方向)的x夹角;
而我这个项目要求是以机背摄像头的指示方向作为参考基准(也就是沿z轴的负方向),那么得到的x值依然是代表方向,只是存在那个一开始搞不懂的-90度误差
简单地说就是水平伸出左手手掌,掌心向上拇指伸直;这个时候如果中指代表的是摄像头的方向,那么原y轴也就是x值的参考坐标是拇指指向的方向。那自然是存在-90度的偏差。哈哈哈,
结论就是xyz三轴的值和应用或手机设置的横屏或竖屏无关的。也就是说不必做翻转屏的坐标转换。但要考虑握持手机的方向修正。
关于Android的方向传感器相关推荐
- Android 利用方向传感器实现 指南针
step1:新建一个项目Compass,并将一张指南针图片导入到res/drawable-hdpi目录中 step2:设计应用的UI界面,main.xml <?xml version=" ...
- Android 利用方向传感器获得手机的相对角度
1.android 的坐标系是如何定义x, y z 轴的. x轴的方向是沿着屏幕的水平方向从左向右,如果手机不是正方形的话,较短的边需要水平放置,较长的边需要垂直放置. Y轴的方向是从屏幕的左下角开始 ...
- Android 利用方向传感器实现 指南针
step1:新建一个项目Compass,并将一张指南针图片导入到res/drawable-hdpi目录中 step2:设计应用的UI界面,main.xml <?xml version=" ...
- Android笔记 方向传感器
1传感器概念 图片资源来自传智播客张泽华视频114集 demo 1布局一张图片 网上随便找一张指南针图片 <RelativeLayout xmlns:android="http://s ...
- Android利用方向传感器获得手机的相对角度实例说明
1.android 的坐标系是如何定义x, y z 轴的 x轴的方向是沿着屏幕的水平方向从左向右,如果手机不是正方形的话,较短的边需要水平放置,较长的边需要垂直放置. Y轴的方向是从屏幕的左下角开始沿 ...
- Android基于方向传感器实现指南针功能
这里做了一个指南针,主要用到了Android里的加速度传感器和地磁传感器 Github源码 1.数据初始化 private USensor(Context context) {if (sorMgr = ...
- android 横盘方向传感器,横盘震荡选择方向!
2020.10.15日 上证指数: 大盘已经连续3天盘整了,而且这三天还是逐渐下行的态势. 今天冲高后又被打下来,显得有气无力.按理说上面的缺口不远了,很容易就能补上,不知道主力是怎么想的,这里到底是 ...
- Android方向传感器的相关问题
android的方向传感器Sensor.TYPE_ORIENTATION(已过时,实测新方法得到的结果和旧方法一致) 三个值分别表示: value[0] 方向角,用来测方向 value[1] 垂直方向 ...
- Android Sensor Orientation 传感器开发
手机方向图 将手机平放在桌面上来看,手机的左下角是坐标原点,水平向右为x轴,水平向前为y轴,由x轴和y轴正方向叉乘形成的方向 为z轴,当手机平放时,z轴指向天空的方向. 注释: 手机放平: 水平旋转 ...
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37730469 在上一篇博客中,我们成功把地图导入了我们的项目.本篇我们准备为地图 ...
最新文章
- 使用libevent多线程验证Linux上的服务器惊群现象
- 如何用c语言读取硬盘串号_如何用C语言实现OOP
- 信号处理之频谱原理与python实现
- React.js入门笔记
- SIGIR 2021|重新思考Attention在CTR预估中作用
- SparkSQL程序设计
- 【转】Fresco之强大之余的痛楚
- 大数据实战之环境搭建(十)
- 微软官方首度回应黑屏恐慌:不强制 不诉讼
- Solidity编程 五 之 数据类型
- Sobel边缘检测算法原理
- 服务器lsass占用内存_记一次服务器病毒查杀过程:lsass.exe占用内存高
- 重写和重载的区别是什么
- 公司内网限制qq微信登陆--解决办法
- Deep learning-based method coupled with small sample learning for solving partial differential equat
- 王小锤学Java:retainAll函数那点儿事
- 真正从零开始搭建网站—宝塔面板+wordpress(超详细教程)
- 物联网安全知识点总结--第六章 物联网应用层安全
- 运维管理系统,效果稳定、可靠运行
- 先锋系何以失控?去年6月起就已经出现资金链紧张的迹象