Android平台下的传感器包括加速度传感器(Accelerometer)、姿态传感器(Orientation)、磁场传感器(Magnetic Field)和光传感器(Light)。
Android 平台下传感器应用的开发通过监听器机制来实现,要针对某一种或多种传感器开发应用,主要的步骤如下:
1. 创建SensorManager对象
2. 实现SensorListener接口
这是开发传感器应用最主要的工作,实现SensorListener接口主要需要实现一下两个方法。
- void onAccuracyChanged(int sensor, int accuracy):该方法在传感器的精确度发生变化时调用,SensorManager提供了3种精确度,由高到低分别为:SENSOR_STATUS_ACCURACY_HIGH、SENSOR_STATUS_ACCURACY_MEDIUM和SENSOR_STATUS_ACCURACY_LOW。参数accuracy为新的精确度。
- void onSensorChanged(int sensor, float[] values):该方法在传感器的数据发生变化时调用,开发传感器应用的主要的业务代码应该放在这里执行,如读取数据并根据数据的变化进行相应的操作等。方法传入的参数sensor为代表传感器类型的常量,values为float类型数组,其长度和内容因传感器类型的不同而变化。
3. 注册SensorListener
- 开发玩SensorListener之后,剩下的工作就是在程序的适当位置注册监听和取消监听了。在这里调用步骤1中获得的SensorManager对象的registerListener方法来注册监听器,其接收的参数为监听器对象、传感器类型以及传感器事件传递的频度。
- 取消注册SensorListener时调用SensorManager的unregisterListener方法,一般来讲注册和取消注册的方法应该成对出现,如果在Activity的onResume方法中注册SensorListener监听就应在onPause方法中取消注册。
常用传感器简介
1>. 加速度传感器Accelerometer
加速度传感器主要感应手机的运动,在注册了传感器监听器后加速度传感器主要捕获3个参数values[0]、values[1]、values[2]。
values[0]:空间坐标系中x轴方向上的加速度减去重力加速度减去中立加速度在x轴上的分量。
values[1]:空间坐标系中x轴方向上的加速度减去重力加速度减去中立加速度在y轴上的分量。
values[2]:空间坐标系中x轴方向上的加速度减去重力加速度减去中立加速度在z轴上的分量。
上述3个数据的单位均为米每二次方秒。
距离说明:
1.当手机平放到桌面静止时,加速度为重力加速度g,通过0减去-g(重力加速度g方向为z轴反方向,故为负值)得到values[2]为g。
2.如果把手机水平方向右推,此时手机x方向上的加速度为正,即values[0]为正。
3.当把手机以a米每二次方秒的加速度竖值向上举时,values[2]的返回值为(a+g)米每二次方秒,通过a减去-g得到。
2>.姿态传感器Orientation
姿态传感器主要感应手机方位的变化,其每次读取的都是静态的状态值,在注册了传感器监听器后姿态传感器主要捕获3个参数values[0]、values[1]、values[2],分别代表手机沿Yaw轴、Pitch轴和Roll轴转过的角度。
1.Yaw轴是3个方向轴中唯一不变的轴,其方向总是竖直向上,和空间坐标系中的z轴是等同的,也就是中立加速度g的反方向。
2.Pitch轴方向依赖于手机沿Yaw轴的转动情况,即当手机沿Yaw转过一定角度后,Pitch轴也相应围绕Yaw轴转过相同的角度。Pitch轴的位置依赖于手机沿Yaw轴转过的角度,好比Yaw轴和Pitch轴是两个焊死在一起成90度夹角的铁棍。
3.Roll轴的方向虽然依赖于手机沿Yaw轴和Pitch轴转动的情况,但是Roll轴的确定并不复杂,Roll轴与手机之间的相对关系是固定的。其总是沿着手机屏幕长边正方向。
注:
1.Yaw轴永远是竖直向上的方向,因为额在驾驶飞机的时候无论飞机如何旋转/翻滚/飞行员都必须确定向上的举对方向。
2.Pitch轴会随着Yaw轴旋转,实际上Pitch轴方向可以通过推算飞机的朝向,绕Pitch轴旋转表示飞机上拉(抬头起机)或下推(机头向下)
3.Roll轴表示贯穿机身的轴,与飞机是相对静止的,飞机绕Roll轴旋转左倾或右倾。
3>.其他传感器
1. 磁场传感器Magnetic Field
磁场传感器主要用于感应周围的磁感应强度,注册监听器后其主要捕获3个参数:values[0]、values[1]、values[2]。3个参数分别代表磁感应强度在空间坐标系中3个方向轴上的分量,所有数据的单位为uT,即微特拉斯。
2. 光传感器Light
光传感器用于感应周围的光强,注册监听器后只捕获一个参数:values[0]。该参数代表周围的光照强度,单位为勒克斯(lux)。
3. 距离传感器 Proximity
距离传感器用于感应周围靠近的物体,在注注册监听器后只捕获一个参数:values[0]。该参数代表传感器的物体距离,以厘米为单位。