Android-Class(1)| Sensor
一.简介
Android系统提供了对传感器的支持,如果手机的硬件提供了这些传感器的话,那么我们就可以通过代码获取手机外部的状态。比如说手机的摆放状态、外界的磁场、温度和压力等等。
二.使用步骤
1.获得传感器管理对象
SensorManager mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
2.获取传感器的类型
Sensor mSensor = mSensorManager.getDefaultSensor(传感器类型);
传感器可选类型如下:
Sensor.TYPE_ORIENTATION:方向传感器。
Sensor.TYPE_GYROSCOPE:陀螺仪传感器。
Sensor.TYPE_MAGNETIC_FIELD:磁场传感器。
Sensor.TYPE_GRAVITY:重力传感器。
Sensor.TYPE_LINEAR_ACCELERATION:线性加速度传感器。
Sensor.TYPE_AMBIENT_TEMPERATURE:温度传感器。
Sensor.TYPE_LIGHT:光传感器。
Sensor.TYPE_PRESSURE:压力传感器。
3.为传感器注册监听器
mSensorManager.registerListener(new SensorEventListener() {
// 当传感器的值改变的时候回调该方法
@Override
public void onSensorChanged(SensorEvent event) {
}
// 当传感器精度发生改变时回调该方法
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}, mSensor, SensorManager.SENSOR_DELAY_GAME);
其中registerListener(SensorEventListener listener, Sensor sensor,int samplingPeriodUs)
方法参数如下:
- listener:监听传感器时间的监听器,该监听器需要实现SensorEventListener接口。
- sensor:传感器对象。
-
samplingPeriodUs:指定获取传感器频率,一共有如下几种:
1)SensorManager.SENSOR_DELAY_FASTEST:最快,延迟最小,同时也最消耗资源,一般只有特别依赖传感器的应用使用该频率,否则不推荐。
2)SensorManager.SENSOR_DELAY_GAME:适合游戏的频率,一般有实时性要求的应用适合使用这种频率。
3)SensorManager.SENSOR_DELAY_NORMAL:正常频率,一般对实时性要求不高的应用适合使用这种频率。
4)SensorManager.SENSOR_DELAY_UI:适合普通应用的频率,这种模式比较省电,而且系统开销小,但延迟大,因此只适合普通小程序使用。
4.取消注册传感器
当我们在程序中不需要使用传感器后,需要我们进行手动取消注册释放资源:
mSensorManager.unregisterListener(this);
三.传感器作用详解
1.陀螺仪传感器
陀螺仪传感器用于感应手机的旋转速度。陀螺仪传感器给我们返回了当前设备的X、Y、Z三个坐标轴(坐标系统与加速度传感器一模一样)的旋转速度。旋转速度的单位是弧度/秒,旋转速度为:正值代表逆时针旋转,负值代表顺时针旋转。关于返回的三个角速度说明如下:
- 第一个值:代表该设备绕X轴旋转的角速度。
- 第二个值:代表该设备绕Y轴旋转的角速度。
- 第三个值:代表该设备绕Z轴旋转的角速度。
陀螺仪传感器一般是用于进行记步数功能的实现。
2.磁场传感器
磁场感应器主要读取设备周围的磁场强度。磁场传感器会返回三个数据,分别代表周围磁场分解到X、Y、Z三个方向的磁场分量,磁场数据的单位是微特斯拉。
3.重力传感器
重力传感器会返回一个三维向量,这个三维向量可显示重力的方向和强度。重力传感器的坐标系统和加速度传感器的坐标系统相同。
4.温度传感器
温度传感器用于获取设备所处环境的温度。温度传感器会返回一个数据,代表手机设备周围的温度,单位是摄氏度。
5.光传感器
光传感器用于获取设备周围光的强度。光传感器会返回一个数据,代表手机周围光的强度,单位是勒克斯。
6.压力传感器
压力传感器用于获取设备周围压力的大小。压力传感器会返回一个数据,代表设备周围压力的大小。
7.心率传感器
心率传感器是在5.0之后新增的一个传感器,用于返回佩戴设备的人每分钟的心跳次数。该传感器返回的数据准确性可以通过SensorEvent的accuracy进行判断,如果该属性值为:SENSOR_STATUS_UNRELIABLE或SENSOR_STATUS_NO_CONTACT,则表明传感器返回的数据是不太可靠的,应该丢弃。
在使用心率传感器时,需要增加如下权限:
<uses-permission android:name="android.permission.BODY_SENSORS"/>