Android平台支持三种宽泛类别的传感器:
1. 运动传感器
这些传感器沿着三轴方向来测量加速度和扭力。这种类型传感器包括加速度传感器、重力传感器、陀螺仪和选择矢量传感器。
2. 环境传感器
这些传感器测量各种环境参数,如周围空气的温度和压力、照度和湿度等。这种类型传感器包括气压计、光度计、和温度计等。
3. 位置传感器
这些传感器用于测量设备的物理位置。这种类型传感器包括方向传感器和磁力计等。
Android平台所支持的传感器类型
传感器 | 类型 | 介绍 | 常用场景 |
TYPE_ACCELEROMETER | Harderware | 以m/s2为单位测量应用于设备三轴(X、Y、Z)的加速力,包括重力 | 运动检测(振动、倾斜等) |
TYPE_AMBIENT_TEMPERATURE | Harderware | 以摄氏度(°C)为单位测量周围温度。 | 监测空气温度 |
TYPE_GRAVITY | Software or Harderware | 以m/s2为单位测量应用于设备三轴(X、Y、Z)的重力。 | 运动检测(振动、倾斜等) |
TYPE_GYROSCOPE | Hardware | 以弧度/秒(rad/s)为单位,测量设备围绕三个物理轴(X、Y、Z)的旋转率 | 旋转检测(旋转、翻转等) |
TYPE_LIGHT | Hareware | 以lx为单位,测量周围的亮度等级(照度) | 控制屏幕的亮度 |
TYPE_LINEAR_ACCELERATION | Software or Harderware | 以m/s2为单位测量应用于设备三个物理轴(X、Y、Z)的加速力,重力除外 | 检测一个单独的物理轴的加速度。 |
TYPE_MAGNETIC_FIELD | Hardware | 以μT为单位,测量设备周围三个物理轴(x,y,z)的磁场。 | 创建一个罗盘 |
TYPE_ORIENTATION | Software | 测量设备围绕三个物理轴(x,y,z)的旋转角度。在API Level 3以后,你能够通使用重力传感器和磁场传感器跟getRotationMatrix()方法相结合来获取倾斜矩阵和旋转矩阵。 | 判断设备的位置 |
TYPE_PRESSURE | Hardware | 以hPa或mBar为单位来测量周围空气的压力 | 检测空气压力的变化 |
TYPE_PROXIMITY | Hardware | 以cm为单位,测量一个对象相对与设备屏幕的距离。这个传感器通常用于判断手持设备是否被举到了一个人的耳朵附近。 | 通话期间的电话位置。 |
TYPE_RELATIVE_HUMIDITY | Hardware | 以百分比(%)为单位测量周围的相对湿度 | 监测露点,绝对和相对的湿度。 |
TYPE_ROTATION_VECTOR | Software or Harderware | 通过提供设备旋转矢量的三个要素来测量设备的方向 | 运动监测和旋转监测。 |
TYPE_TEMPERATURE | Hardware | 以摄氏度((°C)为单位来测量设备的温度。这个传感器在各种不同设备中被实现,并且在API Level 14中被用于替换TYPE_AMBIENT_TEMPERATURE传感器 | 监测温度 |
传感器框架
1. SensorManager
使用这个类来创建一个传感器服务的实例。这个类提供了各种用于访问和监听传感器的方法,它还提供了几个传感器常量,用于报告传感器的精度、设置数据获取的速率以及校准传感器等。
2. Sensor
使用这个类来创建一个特殊传感器的实例。它提供了判断传感器能力的各种方法。
3. SensorEvent
系统使用这个类来创建一个传感器事件对象,他提供了相关传感器事件的信息。一个传感器事件对象包含以下信息:
A.原始传感器数据;
B.产生事件的传感器的类型;
C.数据的精度;
D.事件的时间戳。
4. SensorEventListener
使用这个接口来创建两个回调方法,这两个方法在传感器值变化时或精度变化时,接收通知(传感器事件)。
在典型的应用程序中,你使用传感器相关的API来执行两项基本任务:
1. 识别传感器及传感器能力
在运行时识别传感器和传感器能力,对于判断你的应用程序是否有功能依赖特殊的传感器类型和能力是有益的。例如,你可能想要识别当前设备上的所有传感器,并且要禁用所有的依赖传感器所不具备的能力的功能。同样,你可能想要识别所有的给定类型的传感器,以便你能够选择适合你的应用程序需要的传感器。
2. 监视传感器事件
监视传感器事件是获取原始传感器数据的方式。传感器事件是在每次检测到它的测量参数发生变化时发生。传感器事件提供了4种信息:
A. 触发事件的传感器的名称;
B. 事件的时间戳;
C. 事件的精度;
D. 触发事件的原始传感器数据。
//获取感应器管理器
SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
//获取方向传感器
Sensor orientationSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
sensorManager.registerListener(sensorEventListener, orientationSensor, SensorManager.SENSOR_DELAY_NORMAL);//获取加速度传感器
Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(sensorEventListener, accelerometerSensor, SensorManager.SENSOR_DELAY_NORMAL);