我们的App中, 都免不了传感器的使用,,其中最常见的传感器 重力传感器 加速度传感器 亮度传感器……….
传感器的使用在API 的 Sensor包中, 通过SensorManager , 对传感器进行处理.
接下来就通过对加速度传感器的简单使用来介绍传感器
关于监听器的简单使用,就是以下三个步骤.
SensorManager: 对传感器管理类, 所有的传感器的处理,都是从这个类开始的,通过不同的type,获得不同的传感器
SensorManager.getSensorList(int type) 获取指定类型 的传感器器列列表;
SensorEventListener : 对传感器的监听,监测监听器的数值发生变化
SensorManager.registerListener() // 来注册传感器器
SensorManager.unregisterListener() // 来取消传感器器
Sensor: 存储传感器的常量表示等……………
1.获取SensorManager
获取SensorManager, 并 对加速度传感器监听
SensorManager manager = ((SensorManager) getSystemService(Context.SENSOR_SERVICE));
if (mManager != null) {
Sensor accelerometerSensor = manager .getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
// 添加监听
manager.registerListener(this, accelerometerSensor , SensorManager.SENSOR_DELAY_GAME);
}
2.监听事件
/**
*当程序采样传感器的数值之后,数据就会被封装成SensorEvent 传递给这个方法
* 根据这个方法的持续调用,就可以知道了解数据的变化
* /
@Override
public void onSensorChanged(SensorEvent event) {
int type = event.sensor.getType();
if (type == Sensor.TYPE_ACCELEROMETER) {
processAccelerometer(event);
}
}
private void processAccelerometer(SensorEvent event) {
float[] values = event.values;
float x = values[0];
float y = values[1];
float z = values[2];
float mx = Math.abs(x);
float my = Math.abs(y);
float mz = Math.abs(z);
if (mx >= 12 || my >= 12 || mz >= 12) {
Toast.makeText(this, "摇了", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
3. 销毁
@Override
protected void onDestroy() {
if (mManager != null) {
if (mAccelerometerSensor != null) {
// 终止单个传感器的检测
// 在程序退出之前,一定要将传感器也不再执行
mManager.unregisterListener(this, mAccelerometerSensor);
// 值得注意的一个地方
// 当前mManager监听的所有的传感器都将会取消
// mManager.unregisterListener(this);
}
}
super.onDestroy();
}