Android-传感器
1.传感器的定义:一种物理设备或者生物器官,能够探测、感受外界的信号,物理条件(如光,热, 湿度)或化学组成(如烟雾),并将探知的信息传递给其他的设备或者器官。
2.传感器的种类:可以从不同的角度对传感器进行划分,转换原理(传感器工作的基本物理或化学效应)、用途、输出信号以及制作材料和工艺等。一般是按工作原理分:物理传感器与化学传感器两类。手机上搭载的基本都是物理传感器,手机上搭载的传感器有下面这些:
1.Android常用传感器
- 方向传感器(Orientation sensor)
- 加速感应器(Accelerometer sensor)
- 陀螺仪传感器(Gyroscope sensor)
- 磁场传感器(Magnetic field sensor)
- 距离传感器(Proximity sensor)
- 光线传感器(Light sensor)
- 气压传感器(Pressure sensor)
- 温度传感器(Temperature sensor)
- 重力感应器(Gravity sensor,Android 2.3引入
- 线性加速感应器(Linear acceleration sensor ,Android 2.3引入)
- 旋转矢量传感器(Rotation vector sensor,Android 2.3)
- 相对湿度传感器(Relative humidity sensor,Android 4.0)
- 近场通信(NFC)传感器(Android 2.3引入),NFC和其他不一样,具有读写功能。
使用传感器开发
1,传感器的开发首先需要获取传感器的一些信息,获取信息需要以下步骤
- 获取传感器:Android提供了一个sensorManager管理器,通过这个类可以获取到都有哪些传感器,获取sensorManager对象代码如下:
SensorManager sm = (sensorManager)getSystemService(SENSOR_SERVICE);
- 获取传感器对象列表,通过sensorManager管理器的getSensorList()方法,可以获取传感器对象列表,具体代码如下:
List<Sensor> allSensor = sm.getSensorList(Sensor.TYPE_ALL);
- 循环获取Sensor对象,然后调用对应方法获得传感器的相关信息,,具体代码如下
for(Sensor s:allSensor ){
sensor.getName(); // 获得传感器名称
sensor.getType(); //获得传感器种类
sensor.getVendor(); //获得传感器供应商
sensor.getVersion(); //获得传感器的版本
sensor.getResolution(); //获得精度值
sensor.getMaxmumRange(); //获得最大范围
sensor.getPower() //传感器使用时的耗电量
以上步骤获取到传感器信息
2.获取传感器传回来的数据
- 通过调用Context的getSystemServic方法,获取传感器管理器,具体代码如下
SensorManager sm = (sensorManager)getSystemService(SENSOR_SERVICE);
- 调用SensorManager 对象的getDefaultSensor方法,获取指定类型的传感器,例如这里使用光线传感器,具体代码:
Sensor mSensorOrientation = sm.getDefaultSensor(Sensor.TYPE_LIGHT);
- 为传感器注册监听事件,通过调用sensorManager对象的registerListener()方法来注册监听事件,具体代码如下
<code>ms.registerListener(mContext,mSensorOrientation,andriod:hardware.SensorManager .SENSOR_DELAY_UI);</code>
参数说明:
listener:监听传感器事件的监听器,通过SensorEventListener接口来完成
sensor:传感器对象
rate:指定获取传感器数据的频率
- SENSOR_DELAY_FASTEST——延时:0ms
- SENSOR_DELAY_GAME——延时:20ms
- SENSOR_DELAY_UI——延时:60ms
- SENSOR_DELAY_NORMAL——延时:200ms
实现 SensorEventListener接口,重写onSensorChanged和onAccuracyChanged的方法。
①:onSensorChanged(SensorEvent event);该方法在传感器的值发生改变的时候调用,其参数是一个SensorEvent 对象,通过该对象的values属性可以获取传感器的值,该值是一个数组,该变量最多有三个元素,而且传感器不同,对应元素代表的含义也不同
②:onAccuracyChanged(Sensor sensor , int accuracy);当传感器的进度发生改变时会回调,
参数说明:
sensor:传感器对象
accuracy:表示传感器新的精度
- 具体代码如下
@Override
public void onSensorChanged(SensorEvent event){
final float[] _Date = event.values;
this.mService.onSensorChanged(_Date[0],_Date[1],_Date[2]);
}
@Override
public void onAccuracyChanged(Sensor sensor , int accuracy){
}
- 使用完传感器后对监听事件取消注册,具体代码如下
ms.registerListener(mContext,mSensorOrientation,andriod:hardware.SensorManager .SENSOR_DELAY_UI);