Android方向传感器实践——自己动手做指南针

 

 G6上运行的指南针程序 

 

传感器(Sensor)系统可以让智能手机的功能更加丰富多彩,在Android系统中支持多种传感器。AndroidSensor系统涉及了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

 

在程序中我们可以获取到移动设备上方向传感器、加速度传感器或其他传感器的信息,我们可以根据得到的数值与上一次得到的数值之间的关系来进行需要的操作。在指南针程序中我们主要需要获取方向的数据,因此我们在实验机上做了一个测试,获取了在不同情况下传感数值的变化规律。

 

水平放置示意图

下面是我们实验中测试到的数据(由于我们所用实验机HTC G6只支持方向传感器,我们只测试了方向传感器在不同状态下的数值变化关系):

 

手机状态

数值状态

数值范围

手机水平放置,顶部指向正

x、y、z方向值为0

0

水平逆时针旋转

x不断减少

360 ~ 0

水平顺时针旋转

x不断增大

0 ~ 360

当手机左侧抬起时

z不断减少

0 ~ -180

当手机右侧抬起时 

z不断增大

0 ~ 180

当手机顶部抬起时  

y不断减少

0 ~ -180

当手机底部抬起时  

y不断增大

0 ~ 180

 

*注意:实验数据是基于实验机型号(HTC G6,其它型号的设备可能会有所不同。

  

    经过实验,我们发现当手机顶部指向正北方时方向值为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

 

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页