Android传感器专题培训课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Android传感器专题培训课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 传感器 专题 培训 课件
- 资源描述:
-
1、AndroidAndroid传感器传感器android硬件传感器硬件传感器 Android传感器,分别包括加速度传感器(accelerometer),陀螺仪(gyroscope),环境光照传感器(light),磁力传感器(magnetic field),方向传感器(orientation),压力传感器(pressure),距离传感器(proximity)和温度传感器(temperature) 。 从Android1.5开始,系统内置了对多达八种传感器的支持,利用这些传感器我们可以制作出各种有趣的应用程序和游戏。 在Android应用程序中使用传感器要依赖于android.hardware.Se
2、nsorEventListener接口。通过该接口可以监听传感器的各种事件。 android硬件传感器硬件传感器 传感器类型常量内部整数值中文名称 Sensor.TYPE_ACCELEROMETER1加速度传感器 Sensor.TYPE_MAGNETIC_FIELD2磁力传感器 Sensor.TYPE_ORIENTATION3方向传感器 Sensor.TYPE_GYROSCOPE4陀螺仪传感器 Sensor.TYPE_LIGHT5环境光照传感器 Sensor.TYPE_PRESSURE6压力传感器 Sensor.TYPE_TEMPERATURE 7温度传感器 Sensor.TYPE_PROXI
3、MITY8距离传感器android硬件传感器硬件传感器 从传感器管理器中获取其中某个或者某些传感器的方法有如下三种: 第一种:获取某种传感器的默认传感器 Sensor defaultGyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE); 第二种:获取某种传感器的列表 List pressureSensors = sensorManager.getSensorList(Sensor.TYPE_PRESSURE); 第三种:获取所有传感器的列表, List allSensors = sensorManager.getSe
4、nsorList(Sensor.TYPE_ALL);android硬件传感器硬件传感器 对于某一个传感器,它的一些具体信息的获取方法可以见下表: 方法描述 getMaximumRange()最大取值范围 getName()设备名称 getPower()功率 getResolution()精度 getType()传感器类型 getVentor()设备供应商 getVersion()设备版本号android硬件传感器硬件传感器 SensorEventListener接口的代码如下: package android.hardware; public interface SensorEventList
5、ener public void onSensorChanged(SensorEvent event); public void onAccuracyChanged(Sensor sensor, int accuracy); 在SensorEventListener接口中定义了两个方法:onSensorChanged和onAccuracyChanged。当传感器的值发生变化时,例如磁阻传感器的方向改变时会调用onSensorChanged方法。当传感器的精度变化时会调用onAccuracyChanged方法。 android硬件传感器硬件传感器 onSensorChanged方法只有一个Sen
6、sorEvent类型的参数event,其中SensorEvent类有一个values变量非常重要,该变量的类型是float。但该变量最多只有3个元素,而且根据传感器的不同,values变量中元素所代表的含义也不同。 在解释values变量中元素的含义之前,先来介绍一下Android的坐标系统是如何定义X、Y、Z轴的。 X轴的方向是沿着屏幕的水平方向从左向右。如果手机不是正方形的话,较短的边需要水平放置,较长的边需要垂直放置。 Y轴的方向是从屏幕的左下角开始沿着屏幕的垂直方向指向屏幕的顶端。 将手机平放在桌子上,Z轴的方向是从手机里指向天空。 1.1方向传感器方向传感器 在方向传感器中value
7、s变量的3个值都表示度数,它们的含义如下: values0:该值表示方位,也就是手机绕着Z轴旋转的角度。0表示北(North);90表示东(East);180表示南(South);270表示西(West)。如果values0的值正好是这4个值,并且手机是水平放置,表示手机的正前方就是这4个方向。可以利用这个特性来实现电子罗盘。 values1:该值表示倾斜度,或手机翘起的程度。当手机绕着X轴倾斜时该值发生变化。values1的取值范围是-180values1 180。假设将手机屏幕朝上水平放在桌子上,这时如果桌子是完全水平的,values1的值应该是0。 (由于很少有桌子是绝对水平的,因此,该
8、值很可能不为0,但一般都是-5和5之间的某个值)1.1方向传感器方向传感器 这时从手机顶部开始抬起,直到将手机沿X轴旋转180度(屏幕向下水平放在桌面上)。在这个旋转过程中,values1会在0到-180之间变化,也就是说,从手机顶部抬起时,values1的值会逐渐变小,直到等于-180。如果从手机底部开始抬起,直到将手机沿X轴旋转180度,这时values1会在0到180之间变化。也就是values1的值会逐渐增大,直到等于180。可以利用values1和下面要介绍的values2来测量桌子等物体的倾斜度。 values2:表示手机沿着Y轴的滚动角度。取值范围是-90values290。假设
9、将手机屏幕朝上水平放在桌面上,这时如果桌面是平的,values2的值应为0。将手机左侧逐渐抬起时,values2的值逐渐变小,直到手机垂直于桌面放置,这时values2的值是-90。将手机右侧逐渐抬起时,values2的值逐渐增大,直到手机垂直于桌面放置,这时values2的值是90。在垂直位置时继续向右或向左滚动,values2的值会继续在-90至90之间变化。 1.2加速传感器加速传感器 该传感器的values变量的3个元素值分别表示X、Y、Z轴的加速值。例如,水平放在桌面上的手机从左侧向右侧移动,values0为负值;从右向左移动,values0为正值。要想使用相应的传感器,仅实现Sen
10、sorEventListener接口是不够的,还需要使用下面的代码来注册相应的传感器。 / 获得传感器管理器 SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE); / 注册方向传感器 sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_FASTEST);1.2加速传感器加速传感器 如果想注册其他的传感器,可以改变getDefaultSensor方法的第1个参数值,例如
11、,注册加速传感器可以使用Sensor.TYPE_ACCELEROMETER。在Sensor类中还定义了很多传感器常量,但要根据手机中实际的硬件配置来注册传感器。如果手机中没有相应的传感器硬件,就算注册了相应的传感器也不起任何作用。getDefaultSensor方法的第2个参数表示获得传感器数据的速度。SensorManager.SENSOR_DELAY_ FASTEST表示尽可能快地获得传感器数据。除了该值以外,还可以设置3个获得传感器数据的速度值,这些值如下: SENSOR_DELAY_FASTEST:以最快的速度获得传感器数据。 SENSOR_DELAY_GAME:适合于在游戏中获得传感
12、器数据。 SENSOR_DELAY_UI:适合于在UI控件中获得传感器数据。 SENSOR_DELAY_NORMAL:以一般的速度获得传感器的数据上面四种类型获得传感器数据的速度依次递减。从理论上说,获得传感器数据的速度越快,消耗的系统资源越大。因此建议读者根本实际情况选择适当的速度获得传感器的数据。 1.3重力感应器重力感应器 重力传感器的类型常量是Sensor.TYPE_GRAVITY。重力传感器与加速度传感器使用同一套坐标系。values数组中三个元素分别表示了X、Y、Z轴的重力大小。Android SDK定义了一些常量,用于表示星系中行星、卫星和太阳表面的重力。下面就来温习一下天文知识
13、,将来如果在地球以外用Android手机,也许会用得上。public static final float GRAVITY_SUN= 275.0f;public static final float GRAVITY_MERCURY= 3.70f;public static final float GRAVITY_VENUS= 8.87f;public static final float GRAVITY_EARTH= 9.80665f;public static final float GRAVITY_MOON= 1.6f;public static final float GRAVITY_M
14、ARS= 3.71f;public static final float GRAVITY_JUPITER= 23.12f;public static final float GRAVITY_SATURN= 8.96f;public static final float GRAVITY_URANUS= 8.69f;public static final float GRAVITY_NEPTUNE= 11.0f;1.4 光线传感器光线传感器 光线传感器的类型常量是Sensor.TYPE_LIGHT。values数组只有第一个元素(values0)有意义。表示光线的强度。最大的值是120000.0f
15、。Android SDK将光线强度分为不同的等级,每一个等级的最大值由一个常量表示,这些常量都定义在SensorManager类中,代码如下:public static final float LIGHT_SUNLIGHT_MAX =120000.0f;public static final float LIGHT_SUNLIGHT=110000.0f;public static final float LIGHT_SHADE=20000.0f;public static final float LIGHT_OVERCAST= 10000.0f;public static final floa
16、t LIGHT_SUNRISE= 400.0f;public static final float LIGHT_CLOUDY= 100.0f;public static final float LIGHT_FULLMOON= 0.25f;public static final float LIGHT_NO_MOON= 0.001f;上面的八个常量只是临界值。读者在实际使用光线传感器时要根据实际情况确定一个范围。例如,当太阳逐渐升起时,values0的值很可能会超过LIGHT_SUNRISE,当values0的值逐渐增大时,就会逐渐越过LIGHT_OVERCAST,而达到LIGHT_SHADE,
17、当然,如果天特别好的话,也可能会达到LIGHT_SUNLIGHT,甚至更高。 1.5陀螺仪传感器陀螺仪传感器 陀螺仪传感器的类型常量是Sensor.TYPE_GYROSCOPE。values数组的三个元素表示的含义如下:values0:延X轴旋转的角速度。 values1:延Y轴旋转的角速度。 values2:延Z轴旋转的角速度。 当手机逆时针旋转时,角速度为正值,顺时针旋转时,角速度为负值。陀螺仪传感器经常被用来计算手机已转动的角度,代码如下: private static final float NS2S = 1.0f / 1000000000.0f; private float time
18、stamp; public void onSensorChanged(SensorEvent event) if (timestamp != 0) 1.5陀螺仪传感器陀螺仪传感器 / event.timesamp表示当前的时间,单位是纳秒(1百万分之一毫秒) final float dT = (event.timestamp - timestamp) * NS2S; angle0 += event.values0 * dT; angle1 += event.values1 * dT; angle2 += event.values2 * dT; timestamp = event.timesta
19、mp;上面代码中通过陀螺仪传感器相邻两次获得数据的时间差(dT)来分别计算在这段时间内手机延X、 Y、Z轴旋转的角度,并将值分别累加到angle数组的不同元素上。 1.6其他传感器其他传感器 在前面几节介绍了加速度传感器、重力传感器、光线传感器、陀螺仪传感器以及方向传感器。除了这些传感器外,Android SDK还支持如下的几种传感器。关于这些传感器的使用方法以及与这些传感器相关的常量、方法,读者可以参阅官方文档。 近程传感器(Sensor.TYPE_PROXIMITY) 线性加速度传感器(Sensor.TYPE_LINEAR_ACCELERATION) 旋转向量传感器(Sensor.TYPE
20、_ROTATION_VECTOR) 磁场传感器(Sensor.TYPE_MAGNETIC_FIELD) 压力传感器(Sensor.TYPE_PRESSURE) 温度传感器(Sensor.TYPE_TEMPERATURE)虽然AndroidSDK定义了十多种传感器,但并不是每一部手机都完全支持这些传感器。例如,Google Nexus S支持其中的9种传感器(不支持压力和温度传感器),而HTC G7只支持其中的5种传感器。如果使用了手机不支持的传感器,一般不会抛出异常,但也无法获得传感器传回的数据。读者在使用传感器时最好先判断当前的手机是否支持所使用的传感器。 传感器的相关类库传感器的相关类库
21、测试手机中有哪些传感器 我们可以通过如下三步使用传感器。 (1)编写一个截获传感器事件的类。该类必须实现android.hardware.SensorEventListener接口。 (2)获得传感器管理对象(SensorManager对象)。 (3)使用SensorManager.registerListener方法注册指定的传感器。 通过上面三步已经搭建了传感器应用程序的框架。而具体的工作需要在SensorEventListener接口的onSensorChanged和onAccuracyChanged方法中完成。传感器的相关类库传感器的相关类库SensorManager对象通过getSy
22、stemService方法获得,代码如下:SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 通常手机中包含了若干个传感器模块(如方向传感器、光线传感器等),因此,注册传感器需要指定传感器的类型,如下面的代码注册了光线传感器。sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),SensorManager.SENSOR_DELAY_FASTEST);registerLis
23、tener方法有三个参数。第1个参数是实现SensorEventListener接口的对象。第2个参数用于指定传感器的类型。AndroidSDK预先定义了表示各种传感器的常量,这些常量都被放在Sensor类中。第3个参数表示传感器获得数据的速度。如果想停止获得传感器数据,可以使用unregisterSensor方法注销传感器事件对象。unregisterSensor方法的定义如下:public voidunregisterListener(SensorEventListener listener) 传感器的相关类库传感器的相关类库 unregisterSensor方法有两个重载形式。第一个重载
24、形式用于注销所有的传感器对象。第二个重载形式用于注销指定传感器的事件对象。其中Sensor对象通过SensorManager.getDefaultSensor方法获得。 getDefaultSensor方法只有一个int类型的参数,表示传感器的类型。如Sensor.TYPE_LIGHT表示光线传感器。 注意:一个传感器对像可以处理多个传感器。也就是说,一个实现SensorEventListener接口的类可以接收多个传感器传回的数据。为了区分不同的传感器,需要使用Sensor.getType方法来获得传感器的类型。 传感器的相关类库传感器的相关类库 通过SensorManager.getSen
25、sorList方法可以获得指定传感器的信息,也可以获得手机支持的所有传感器的信息,代码如下 /获得光线传感器 Listsensors = sensorManager.getSensorList(Sensor.TYPE_LIGHT); /获得手机支持的所有传感器 Listsensors = sensorManager.getSensorList(Sensor.TYPE_ALL);传感器实例传感器实例 下面给出一个完整的例子来演示如何获得传感器传回的数据。本例从如下4个传感器获得数据,同时输出了测试手机中支持的所有传感器名称。 加速度传感器(Sensor.TYPE_ACCELEROMETER) 磁
展开阅读全文