• 传感器概述
• Android系统支持的传感器类型
• 与传感器相关的类和接口
• 监听传感器上报数据
传感器
• 概述
大多数Android设备都会内置传感器,用来测量运动,旋转和环境条件(重力,温度,湿度等),这些传感器可以将采集到的高精度的数据上报给应用程序。
我们可以将传感器想成是应用程序的外延,帮助我们设计出更加丰富和多元化的应用。
我们可以通过Android框架层中的SensorManager获取当前手机内置的传感器。
Android系统支持的传感器类型
• TYPE_ACCELEROMETER
名字:加速度传感器
功能:测量设备在x,y,z三个方向上的加速度
支持版本:1.5之后
• TYPEAMBIENTTEMPERATURE
名字:温度传感器
功能:测量环境温度,以摄氏度为单位
支持版本:4.0之后
• TYPE_GRAVITY
名字:重力传感器
功能:测量x,y,z三个方向上的重力分量
支持版本:2.3之后
• TYPE_GYROSCOPE
名字:陀螺仪
功能:测量在x,y,z三个方向上的旋转速率
支持版本:2.3之后
• TYPE_LIGHT
名字:光传感器
功能:测量环境光强
支持版本:1.5之后
• TYPELINEARACCELERATION
名字:线性加速度传感器
功能:测量在x,y,z三个方向上的加速度分量
支持版本:2.3之后
• TYPEMAGNETICFIELD
名字:磁力传感器
功能:测量在x,y,z三个方向上的磁场强度
支持版本:1.5之后
• TYPE_ORIENTATION
名字:旋转传感器
功能:测量在x,y,z三个方向上的旋转角度分量
支持版本:1.5之后
• TYPE_PRESSURE
名字:压力传感器
功能:测量气压值
支持版本:2.3之后
• TYPE_PROXIMITY
名字:距离传感器
功能:测量距离
支持版本:1.5之后
• TYPERELATIVEHUMIDITY
名字:相对湿度传感器
功能:测量环境湿度
支持版本:4.0之后
• TYPEROTATIONVECTOR
名字:旋转向量传感器
功能:测量旋转向量的三个元素
支持版本:2.3之后
• TYPE_TEMPERATURE
名字:温度传感器 功能:测量设备的温度 支持版本:1.5之后
• 说明
线性加速度传感器是加速度传感器减去重力影响获取的数据
加速度 = 重力 + 线性加速度
• 注意
几乎不会有哪一个Android设备会内置以上所有的传感器。
在一个Android设备上,可能会内置同一类型的多个传感器,比如,可能会内置两个精度不同的重力传感器。
与传感器相关的类和接口
• SensorManager
功能:
1.获取手机内置传感器列表
2.注册指定传感器监听器
3.注销监听器
• Sensor
功能:
1.用来表示一个传感器的类
2.设置传感器的能力
• SensorEvent
功能:
1.用来封装传感器上报数据的类
• SensorEventListener
功能:
1.用来监听传感器上报数据的监听器接口
• 获取内置传感器列表
//获取SensorManager SensorManager mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); //获取Sensor列表 //当传入参数为Sensor.TYPE_ALL时,表示获取所有//Sensor,也可以传入指定Sensor类型 List<Sensor> mSensorList = mSensorManager.getSensorList(Sensor.TYPE_ALL);
监听传感器上报数据
• 流程
获取指定的传感器对象
为该传感器设置监听器
• 下面以光传感器为例
监听上报数据
//获取光传感器 Sensor mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); //为传感器设置监听器 mSensorManager.registerListener(new SensorEventListener() { //当Sensor上报的数据发生改变时,onSensorChanged被调用,上报的数据会保存在values属性中 public void onSensorChanged(SensorEvent event) { Log.i("GetSensorList", "light = " + event.values[0]); } //当Sensor精度被改变时,onAccuracyChanged被调用 public void onAccuracyChanged(Sensor sensor, int accuracy) { } }, mSensor, SensorManager.SENSOR_DELAY_NORMAL, null);
注销对指定Sensor的监听
//注销指定Sensor的监听 mSensorManager.unregisterListener(mSensorEventListener, mSensor);
• 对于所有的传感器的使用方法都是一致的
1.获得传感器对象
2.监听传感器上报数据
3.注销对传感器的监听
• 注意
对于不同传感器,上报的数据都是保存在SensorEvent的values数组中,但是,意义会各有不同,比如:对于光传感器,只有values[0]中的数据有意义,它表示的是光强。对于加速度传感器,values[0],values[1],values[2]分别代表x,y,z三个方向上加速度的分量(查看SensorEvent类的帮助文档的说明)
• 练习
使用加速度传感器,控制小球在屏幕内的滚动。