Android中使用传感器是非常简单的,首先获取到一个SensorManager对象,然后使用SensorManager对象获取到具体的传感器,给SensorManager注册一个监听事件并且在不需要的时候解注册就搞定了。下面来看具体的使用:
获取SensorManager对象:
//得到sensorManager对象
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
获取到手机支持的传感器集合:
//获取到所有的传感器
List sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);
for (int i = 0; i < sensorList.size(); i++) {
Sensor sensor= (Sensor) sensorList.get(i);
Log.e("MainActivity",sensor.getName());
}
用公司的手机测试了一下发现这个手机比较旧只有3个传感器,分别为光强传感器、加速度传感器、距离传感器。今天就以光线传感器为例来介绍使用。
1、获取光传感器:
//获取光线传感器
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
2、定义一个监听接口:
//创建一个传感器事件对象
sensorEventListener = new SensorEventListener() {
//传感器精度改变时调用
@Override
public void onSensorChanged(SensorEvent event) {
Log.e(TAG, "onSensorChanged");
//精度
int accuracy = event.accuracy;
//时间戳
long timestamp = event.timestamp;
//传感器的值,不同的传感器代表不同的消息
float[] values = event.values;
for (int i = 0; i < values.length; i++) {
txtv.setText("光照强度为:"+values[0]);
}
}
//传感器信息改变时调用
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
Log.e(TAG, "精度改变了:" + accuracy);
}
};
3、给SensorManager注册监听事件:
//注册
sensorManager.registerListener(sensorEventListener, sensor, SensorManager.SENSOR_DELAY_GAME);
其中第三个参数为样例级别,有四种:
从上往下依次采样频率变低,一般使用第二种,不推荐使用第一种。
4、解注册:
@Override
protected void onDestroy() {
super.onDestroy();
//解注册
sensorManager.unregisterListener(sensorEventListener);
}
扫描关注我的微信公众号:
别的传感器使用套路是一样的,无非就是获取传感器类型不一样,values[]数组的值代表的含义不一样。最后附上Demo:点击下载