1、让IT教学更简单,让IT学习更有效Android程序设计教程第十一章 Android传感器应用开发目录 11.1 传感器简介 11.1.1 传感器的检测 11.1.2 使用传感器的步骤 11.2 光线传感器 11.3 加速度传感器 11.4 陀螺仪传感器 11.5 磁场传感器学习目标 掌握传感器使用的基本步骤 掌握光线传感器的使用 掌握加速度传感器的使用 掌握陀螺仪传感器的使用 掌握磁场传感器的使用11.1.1 传感器的检测 Android SDK中定义了十多种传感器,但是不是每个手机都完全支持这些传感器。如果遇到手机不支持的传感器,程序运行往往不会抛出异常,只是无法获得传感器传回的数据。那么
2、如何知道设备上有哪些传感器可用呢?有两种方式:一种是直接方式,一种是间接方式。直接方式 首先获取SensorManger对象,通过上下文对象的getSystemService(SENSOR_SERVICE)方法就可以获取到系统的传感器管理服务。然后调用SensorManger对象的getSensorList()方法获取传感器集合,遍历获取到的集合就能得到传感器信息。间接方式 在AndroidManifest.xml配置文件中,指定该应用程序只支持运行在具有哪些硬件功能的设备上。如果应用程序需要温度传感器,可以在配置文件中添加下面一行代码。11.1.2 使用传感器的步骤(1)调用Context的
3、getSystemService(Context.SENSOR_SERVICE)方法获取SensorManager对象。(2)调用SensorManager的getDefaultSensor(int type)方法获取指定类型的传感器。(3)在onCreate()生命周期方法中调用SensorManager的registerListener()方法为指定传感器注册监听。(4)实例化SensorEventListener接口,作为registerListener()方法的第一个参数。重写SensorEventListener接口中的onSensorChanged()方法。(5)在onDestro
4、y()生命周期方法中调用SensorManager的unregisterListener()方法释放资源。SensorManager的registerListener()方法的用法如下:public boolean registerListener(SensorEventListener listener,Sensor sensor,int rate)其中:listener:监听传感器事件的监听器,该监听器需要实现SensorEventListener接口。sensor:通过SensorManager的getDefaultSensor(int type)方法获取到的传感器对象。rate:获取传
5、感器数据的频率。该参数由SensorManager中的几个常量来定义。(1)int SENSOR_DELAY_FASTEST=0;以最快的速度获得传感器数据。只有特别依赖传感器数据的应用才推荐采用这种频率,这种模式会造成手机大量耗电。(2)int SENSOR_DELAY_GAME=1;适合游戏的频率,在一般实时性要求的应用上适用这种频率。(3)int SENSOR_DELAY_UI=2;适合普通用户界面的频率,这种模式比较省电,系统开销也小,但是延迟较长。(4)int SENSOR_DELAY_NORMAL=3;11.2 光线传感器 光线传感器的类型常量为Sensor.TYPE_LIGHT(
6、数值为5)。Values数组只有第一个元素values0有意义,表示光线的强度。Android SDK中将光线强度分为不同等级,每一个等级的最大值由一个常量表示,这些常量定义在SensorManager类中,最大值为120000.0f。11.3 加速度传感器 在Android系统中,加速度传感器的类型常量是Sensor.TYPE_ACCELEROMETER(数值为1),单位为m/s2,能够测量应用设备在x、y、z轴上的加速度,又叫作G-sensor。在开发过程中,通过Android的加速度传感器可以取得x、y、z三个轴的加速度,器值存放在values数组中。values数组的三个元素含义如下:
7、values0:沿X轴方向的加速度(手机水平放置,手机横向左右移动)。values1:沿Y轴方向的加速度(手机水平放置,手机前后移动)。values2:沿Z轴方向的加速度(手机竖向上下移动)。11.4 陀螺仪传感器 陀螺仪传感器是一个基于自由空间移动和手势的定位和控制系统,已经广泛运用于手机、平板电脑等移动便携设备上,在将来的设备也会陆续使用到。在Android系统中,陀螺仪传感器的类型是Sensor.TYPE_GYROSCOPE,单位是rad/s,能够测量设备X、Y、Z三轴的角加速度数据。Android中的陀螺仪传感器又名为Gyro-sensor角速度器,利用内部振动机械结构侦测物体转动所产生的角速度,进而计算出物体移动的角度。11.5 磁场传感器 在Android系统中,磁场传感器的类型常量为Sensor.TYPE_MAGNETIC_FIELD(数值为2),单位是uT(微特斯拉),能够测量设备周围3个物理轴(X、Y、Z)的磁场。在Android设备中,磁场传感器主要用于感应周围的磁感应强度,在注册监听器后主要用于捕获如下三个参数:values0:沿X轴方向的磁场分量。values1:沿Y轴方向的磁场分量。values2:沿Z轴方向的磁场分量。谢谢