Android传感器
时间:2017-04-18作者:华清远见
• 传感器概述 • 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类的帮助文档的说明) • 练习 使用加速度传感器,控制小球在屏幕内的滚动。
发表评论
|