传感器的定义:
一种物理设备或者生物器官,能够探测、感受外界的信号,物理条件(如光,热, 适度)或化学组成(如烟雾),并将探知的信息传递给其他的设备或者器官!
传感器的种类:
可以从不同的角度对传感器进行划分,转换原理(传感器工作的基本物理或化学 效应);用途;输出信号以及制作材料和工艺等。一般是按工作原来来分:物理传感器与化学传感器 两类!手机上搭载的基本都是物理传感器,手机上搭载的传感器有下面这些:
- 方向传感器(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和其他不一样,具有读写功能。
等
如何使用传感器
- 获取SensorManager对象
//获取系统的传感器管理器
SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); - 获取Sensor对象
比如这里获取的是方向传感器,想获得什么传感器自己查API~:
Sensor msensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); - 注册SensorManager对象(一般在 onResume()方法中注册)
SensorManager.registerListener(SensorEventListener listener, Sensor sensor, int samplingPeriodUs)
示例继承了SensorEventListener接口
sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_UI);//在交互时,对传感器进行注册
源码中对samplingPeriodUs的四个值的解释
/** get sensor data as fast as possible /
public static final int SENSOR_DELAY_FASTEST = 0;//0ms
/* rate suitable for games /
public static final int SENSOR_DELAY_GAME = 1;//20ms
/* rate suitable for the user interface /
public static final int SENSOR_DELAY_UI = 2;//60ms
/* rate (default) suitable for screen orientation changes */
public static final int SENSOR_DELAY_NORMAL = 3;//200ms - 重现onAccuracyChanged onSensorChanged这两个方法
@Overridepublic void onSensorChanged(SensorEvent event)
{
//当传感器变化时,调用很频繁,不要阻塞
if (sensor != null && event.sensor.getType() == Sensor.TYPE_ORIENTATION) {//判断传感器类型
float degree = -event.values[0];//反方向
RotateAnimation rotateAnimation =
new RotateAnimation(mStartDegree,
degree, Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setDuration(300);//时间延时设置要谨慎
imageView.startAnimation(rotateAnimation);
mStartDegree = degree;
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
//当精度发生变化时} - 注销Sensor对象
一般可以把它写到Activity或者Service的销毁方法中:
protected void onPause() {
super.onPause();
sensorManager.unregisterListener(this);//一定要及时注销
}