我们已经了解了传感器的工作原理和常见的传感器,下面我们要学习的是:了解Android中传感器相关的API以及如何使用这些
传感器。
新建工程
【File】——>【new】——>【Android Application Project】命名为:12_传感器入门
读设备传感器
在程序中通过代码遍历当前设备存在的传感器种类,每一个设备上传感器的有无以及传感器的种类都不一样。下例1-1是具体的
代码实现:
例1-1
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = new ArrayList<Sensor>();
//获取系统传感服务
manager =(SensorManager) getSystemService(SENSOR_SERVICE);
//得到设备上的传感器集合
list = manager.getSensorList(manager.SENSOR_ALL);
for(Sensor sensor :list){
System.out.println("设备上的传感器:=="+sensor.getName());
}
}
复制代码
运行程序,在真机上测试(本例中小米3),此时logcat打印如图1-1所示:
读指定传感器
如何在程序中读取某一指定的传感器对象,下面我们将通过代码读取设备上的光感传感器并实现对当前环境下光度强弱的监听。
具体步骤如下:
读取设备上的传感器对象,代码如例1-2所示:
例1-2
manager = (SensorManager) getSystemService(SENSOR_SERVICE);
//指定传感器的类型,获取该传感器对象
Sensor sensor = manager.getDefaultSensor(Sensor.TYPE_LIGHT);
复制代码
编写监听器,代码如例1-3所示:
例1-3
public class MyListener implements SensorEventListener {
//当传感器的精度发生变化时调用这个方法
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
}
//当传感器检测的数据发生变化时调用这个方法
@Override
public void onSensorChanged(SensorEvent arg0) {
float light = arg0.values[0];
System.out.println("光线强度的大小:===="+light);
}
}
复制代码
编写MyListener内部类使之实现SensorEventListener接口,并重写onAccuracyChanged方法和onSensorChanged方法,在
光线轻度发送变化时回调第二个方法。SensorEvent.values是一个数据对象,该数据的第一个数值就是光线的大小,系统中是
一个float类型的数字来表示,该数值越大这对应的光线强度就越大。
注册监听事件
我们已经获取了该传感器对象,也编写了该对象的监听器,最后需要做的就是给这个传感器对象注册监听事件。代码如例1-4:
例1-4
myListener=new MyListener();
manager.registerListener(myListener, sensor, SensorManager.SENSOR_DELAY_FASTEST);
复制代码
解除监听事件
系统光感传感器不停的获取当前环境的光度服务已经被开启,当我们在退出该应用时,一定要记得关闭该服务,否则后台会一致
运行这个服务,会效果系统资源。具体代码如例 1-5所示:
例1-5
@Override
protected void onDestroy() {
manager.unregisterListener(myListener);
super.onDestroy();
}
复制代码
运行程序,选择在真机(本例为小米3),效果如图1-2所示: