Android方向传感器实践——自己动手做指南针
传感器(Sensor)系统可以让智能手机的功能更加丰富多彩,在Android系统中支持多种传感器。Android的Sensor系统涉及了Android的各个层次。
Android系统支持多种传感器,有的传感器已经在Android的框架中使用,大多数传感器由应用程序来使用。
Android传感器类型分为加速度、磁场、方向、光线、临近性、温度等,具体的如下表:
传感器 | JAVA中的名称 | 本地接口名称 | 数值 |
加速度 | TYPE_ACCELEROMETER | SENSOR_TYPE_ACCELEROMETER | 1 |
磁力域 | TYPE_MAGNETIC_FIELD | SENSOR_TYPE_MAGNETIC_FIELD | 2 |
方向 | TYPE_ORIENTATION | SENSOR_TYPE_ORIENTATION | 3 |
陀螺 | TYPE_GYROSCOPE | SENSOR_TYPE_GYROSCOPE | 4 |
光线(亮度) | TYPE_LIGHT | SENSOR_TYPE_LIGHT | 5 |
压力 | TYPE_PRESSURE | SENSOR_TYPE_PRESSURE | 6 |
温度 | TYPE_TEMPERATURE | SENSOR_TYPE_TEMPERATURE | 7 |
临近性 | TYPE_PROXIMITY | SENSOR_TYPE_PROXIMITY | 8 |
在程序中我们可以获取到移动设备上方向传感器、加速度传感器或其他传感器的信息,我们可以根据得到的数值与上一次得到的数值之间的关系来进行需要的操作。在指南针程序中我们主要需要获取方向的数据,因此我们在实验机上做了一个测试,获取了在不同情况下传感数值的变化规律。
下面是我们实验中测试到的数据(由于我们所用实验机HTCG6只支持方向传感器,我们只测试了方向传感器在不同状态下的数值变化关系):
手机状态 | 数值状态 | 数值范围 |
手机水平放置,顶部指向正北方 | x、y、z方向值为0 | 0 |
水平逆时针旋转 | x不断减少 | 360~0 |
水平顺时针旋转 | x不断增大 | 0~360 |
当手机左侧抬起时 | z不断减少 | 0~-180 |
当手机右侧抬起时 | z不断增大 | 0~180 |
当手机顶部抬起时 | y不断减少 | 0~-180 |
当手机底部抬起时 | y不断增大 | 0~180 |
*注意:实验数据是基于实验机型号(HTCG6),其它型号的设备可能会有所不同。
经过实验,我们发现当手机顶部指向正北方时方向值为0,顶部指向正东方时方向值为90,顶部指向正南方时方向值为180,顶部指向正西方时方向值为270。根据这些数据我们就可以根据方向值的范围盘端当前我们的方位,可以确定指南针的读数。
程序界面非常简洁,一张指南针的图片与相关方位的度数。上方白色小箭头所指方向代表我们当前指向的方向。指南针图片会根据所向方位做出相应的旋转,上方度数也会做出适当的响应,显示当前方位和方向读数。
由于我只考虑在G6上能正常演示,G6的屏幕分辨率为320*480,相关的坐标值我也是根据这个分辨率确定的,移植到其他型号的手机上可能不能正常运行,但只需要修正一下代码就可以,这个希望读者自行修正。
具体步骤如下:
1.首先创建项目SDK版本选择2.1,工程命名为MyCompass
2.添加资源到res/drawable下,一张指南针的图片和白色小箭头图片,格式为透明PNG,注意图片文件名需要小写开头。
3.新建一个CompassView类,用于程序布局设置。
4.新建MyCompass类,这为主程序,在该类中获取传感器信息。
下面附上CompassView类和MyCompass类的代码,同时提供源程序的下载,如果有什么问题的话随时可以与我联系,我的qq:264965161,电子邮箱gsh0913@qq.com,本人非常乐意与大家一起交流,希望大家能共同进步。
源代码的下载地址:http://download.csdn.net/source/2885661
CompassView.java
MyCompass.java
<!--EndFragment--> <!--EndFragment-->更多相关文章
- android 布局中 layout_gravity、gravity、orientation、layout_
- android:layout_gravity="bottom"不起作用问题
- android:layout_gravity="bottom"不起作用问题
- Android传感器编程入门(二)
- Android加速度传感器实现“摇一摇”,带手机振动
- android Scroller
- 工程师淘金:开发Android主攻四大方向
- 工程师淘金:开发Android主攻四大方向
- android 中文 api (64) ―― Scroller