




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、重力加速度传感器Sensor ACCELEROMETER一 介绍Sensor类表示一个感应器的类,可以使用getSensorList方法(此方法属于接下来要讲的SensorManager)获得所有可用的感应器,该方法返回的是一个List;下面的列表显示了,Sensor及作用:intTYPE_ACCELEROMETERA constant describing an accelerometer sensor type./三轴加速度感应器 返回三个坐标轴的加速度单位m/s2;intTYPE_ALLA constant describing all sensor type./用于列出所有感应器int
2、TYPE_GRAVITYA constant describing a gravity sensor type./重力感应器intTYPE_GYROSCOPEA constant describing a gyroscope sensor type./陀螺仪 可判断方向 返回三个坐标轴上的角度intTYPE_LIGHTA constant describing an light sensor type. /光线感应器 单位 lux 勒克斯intTYPE_LINEAR_ACCELERATIONA constant describing a linear acceleration sensor t
3、ype. /线性加速度intTYPE_MAGNETIC_FIELD A constant describing a magnetic field sensor type./磁场感应 返回三个坐标轴的数值微特斯拉intTYPE_ORIENTATIONThis constant is deprecated. use SensorManager.getOrientation() instead./方向感应器 已过时 可以使用方法获得intTYPE_PRESSUREA constant describing a pressure sensor type./压力感应器单位 千帕斯卡intTYPE_PRO
4、XIMITYA constant describing an proximity sensor type./距离传感器intTYPE_ROTATION_VECTORA constant describing a rotation vector sensor type./翻转传感器intTYPE_TEMPERATUREA constant describing a temperature sensor type/温度传感器 单位 摄氏度sensor类一般不需要new而是通过SensorManager的方法获得二 介绍SensorManager类SensorManager 允许你访问设备的感应器。
5、通过传入参数SENSOR_SERVICE参数调用Context.getSystemService方法可以获得一个sensor的实例。永远记得确保当你不需要的时候,特别是Activity暂定的时候,要关闭感应器。忽略这一点肯能导致几个小时就耗尽电池,注意当屏幕关闭时,系统不会自动关闭感应器。三 加速度传感器(1)可以通过这个感应器获得三个浮点型x-axisy-axisz-axis插图分析次数据2011110609092196.gif (10.95 KB, 下载次数: 55)下载附件 保存到相册 2011-11-6 19:10 上传X Y Z分别对应values0到2X表示左右移动的加速度Y表示前
6、后移动的加速度Z表示垂直方向的加速度 (测试时发现,将手机置于水平桌面稳定后 X、Y均为0;Z的值为-9.4 约等于重力加速度-9.8m/s2)下面先看一个基本的获取加速度的demo,希望大家好好注意代码中的注释/*2* author octobershiner3* 2011 07 274* SE.HIT5* 一个演示android加速度感应器的例子6* */7 8 package uni.sensor;10 import java.util.Iterator;11 import java.util.List;13 import android.app.Activity;14 import a
7、ndroid.content.Context;15 import android.hardware.Sensor;16 import android.hardware.SensorEvent;17 import android.hardware.SensorEventListener;18 import android.hardware.SensorManager;19 import android.os.Bundle;20 import android.util.Log;21 22 public class SensorDemoActivity extends Activity 23 /*
8、Called when the activity is first created. */24 /设置LOG标签25 private static final String TAG = sensor;26 privateSensorManager sm;27 Override28 public void onCreate(Bundle savedInstanceState) 29 super.onCreate(savedInstanceState);30 setContentView(R.layout.main);31 /创建一个SensorManager来获取系统的传感器服务32 sm =
9、(SensorManager)getSystemService(Context.SENSOR_SERVICE);33 /选取加速度感应器34 int sensorType = Sensor.TYPE_ACCELEROMETER;35 36 /*37 * 最常用的一个方法 注册事件38 * 参数1 :SensorEventListener监听器39 * 参数2 :Sensor一个服务可能有多个Sensor实现,此处调用getDefaultSensor获取默认的Sensor40 * 参数3 :模式 可选数据变化的刷新频率41 * */42 sm.registerListener(myAcceler
10、ometerListener,sm.getDefaultSensor(sensorType),SensorManager.SENSOR_DELAY_NORMAL);43 44 45 46 /*47 * SensorEventListener接口的实现,需要实现两个方法48 * 方法1 onSensorChanged 当数据变化的时候被触发调用49 * 方法2 onAccuracyChanged 当获得数据的精度发生变化的时候被调用,比如突然无法获得数据时50 * */51 final SensorEventListener myAccelerometerListener = new Senso
11、rEventListener()52 53 /复写onSensorChanged方法54 public void onSensorChanged(SensorEvent sensorEvent)55 if(sensorEvent.sensor.getType() = Sensor.TYPE_ACCELEROMETER)56 Log.i(TAG,onSensorChanged);58 /图解中已经解释三个值的含义59 float X_lateral = sensorEvent.values0;60 float Y_longitudinal = sensorEvent.values1;61 flo
12、at Z_vertical = sensorEvent.values2;62 Log.i(TAG,n heading +X_lateral);63 Log.i(TAG,n pitch +Y_longitudinal);64 Log.i(TAG,n roll +Z_vertical);65 66 67 /复写onAccuracyChanged方法68 public void onAccuracyChanged(Sensor sensor , int accuracy)69 Log.i(TAG, onAccuracyChanged);70 71 ;72 73 public void onPause
13、()74 /*75 * 很关键的部分:注意,说明文档中提到,即使activity不可见的时候,感应器依然会继续的工作,测试的时候可以发现,没有正常的刷新频率76 * 也会非常高,所以一定要在onPause方法中关闭触发器,否则讲耗费用户大量电量,很不负责。77 * */78 sm.unregisterListener(myAccelerometerListener);79 super.onPause();80 81 82 四、加速度传感器(2)加速度传感器与方向传感器的开发步骤类似,只要理清了期中的x,y,z的值之后就可以根据他们的变化来进行编程了,首先来看一副图:假设当地的重力加速度值为g=
14、9.8m/s2当手机正面朝上的时候,z的值为g,反面朝上的时候,z的值为-g 当手机右侧面朝上的时候,x的值为g,右侧面朝上的时候,x的值为-g当手机上侧面朝上的时候,y的值为g,右侧面朝上的时候,y的值为-g 了解了加速度传感器中X,Y,Z的含义之后下面我们就开始学习如何使用.首先我们创建一个传感器管理器和一个传感器监听器,管理器用来管理传感器以及创建各种各样的传感器,监听器用来监视传感器的变化并且进行相应的操作:private SensorManager sensorManager;private MySensorEventListener mySensorEventListener;my
15、SensorEventListener= new MySensorEventListener(); /这个监听器当然是我们自己定义的,在重力感应器感应到手机位置有变化的时候,我们可以采取相应的操作,这里紧紧是将x,y,z的值打印出来.private final class MySensorEventListener implements SensorEventListenerOverride/可以得到传感器实时测量出来的变化值public void onSensorChanged(SensorEvent event) /加速度传感器if(event.sensor.getType()=Senso
16、r.TYPE_ACCELEROMETER)float x = event.valuesSensorManager.DATA_X;float y = event.valuesSensorManager.DATA_Y;float z = event.valuesSensorManager.DATA_Z;/tv_accelerometer是界面上的一个TextView标签,不再赘述tv_orientation.setText(Orientation:+x+,+y+,+z);我们在onResume方法中创建加速度传感器,并向系统注册监听器protected void onResume() Sensor
17、 sensor_accelerometer= sensorManager.getDefaultSensor (Sensor.TYPE_ACCELEROMETER);sensorManager.registerListener(mySensorEventListener,sensor_accelerometer,SensorManager.SENSOR_DELAY_UI);super.onResume();/最后我们在onPause()中注销所有传感器的监听,释放重力感应器资源!protected void onPause() /注销所有传感器的监听sensorManager.unregiste
18、rListener(mySensorEventListener);super.onPause();五、传感器数据 要监控传感器的原始数据,你需要实现SensorEventListener接口的onAccuracyChanged()和onSensorChanged()回调方法。只要发生以下事件,Android系统就会调用这两个方法:传感器精度发生变化 在这种情况下,系统会调用onAccuracyChanged()方法,并传给你一个发生变化的Sensor对象的引用和新的传感器精度值。精度用以下四种状态常量之一来表示:SENSOR_STATUS_ACCURACY_LOW、SENSOR_STATUS_
19、ACCURACY_MEDIUM、SENSOR_STATUS_ACCURACY_HIGH、 SENSOR_STATUS_UNRELIABLE。传感器报送一个新数据 系统会调用onSensorChanged()方法,并传给你一个SensorEvent对象。SensorEvent对象中包含了新数据的相关信息,包括:数据精度、生成数据的传感器、生成数据的时间戳、传感器采到的新数据。以下代码展示了如何用onSensorChanged()方法来监控光线传感器传回的数据,并把原始数据显示在一个由main.xml文件定义为sensor_data的TextView中。 publicclassSensorActi
20、vityextendsActivityimplementsSensorEventListenerprivateSensorManagermSensorManager;privateSensormLight;OverridepublicfinalvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);mSensorManager= (SensorManager)getSystemService(Context.SENSOR_SERVICE);mLi
21、ght=mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);OverridepublicfinalvoidonAccuracyChanged(Sensorsensor,intaccuracy)/ 如果传感器精度发生变化,可以在这里完成些工作。OverridepublicfinalvoidonSensorChanged(SensorEventevent)/ 光线传感器返回单个值。/ 很多传感器会返回3个值,代表每个坐标轴上的数值。floatlux=event.values0;/ 利用此值完成一些工作OverrideprotectedvoidonR
22、esume()super.onResume();mSensorManager.registerListener(this,mLight,SensorManager.SENSOR_DELAY_NORMAL);OverrideprotectedvoidonPause()super.onPause();mSensorManager.unregisterListener(this);传感器报送数据间隔还有一点非常重要,在此例中,调用registerListener()时指定了缺省的数据延时 (SENSOR_DELAY_NORMAL)。 数据延时(或采样率)控制着由onSensorChanged()发送
23、给应用的传感器事件的触发间隔。缺省的数据延迟是200,000微秒,适于监测典型的屏幕方向变动。 你可以把数据延时指定为其它值,SENSOR_DELAY_GAME(20,000微秒)SENSOR_DELAY_UI(60,000微秒)SENSOR_DELAY_FASTEST(0微秒)SENSOR_DELAY_NORMAL(200微秒)Android 3.0 (API Level 11) 开始,你还可以直接指定延时值(微秒数)。你指定的延时只是一个建议值。Android系统和其它应用可以修改这个值。 最佳方案是,你应该指定你能承受的最大延时,因为系统一般会采用一个比设定稍小一点的值(也就是说,你应该选择应用所需的最慢采样率)。 采用更大的延时能够降低处理器的负载并减少耗电量。传感器框架发送传感器事件的实际频率,是没有现成的公共方法来判断的,不过,你可以根据多个传感器事件的时间戳来计算出采样率。 一旦采样率(延时)设置完成,你就不应该改变它。如果由于某种原因需要修改延时,那你就必须注销并重新注册传感器侦听器。请注意上例中使用了onResume()和onPause()回调方法来注册和注销传感器事件侦听器。最佳方案就是,你应该保证在不用时及时关闭传感器,特别当你的activ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 20xx重阳节晚会主持词4篇
- 农作物加工副产品环保型膨松剂创新创业项目商业计划书
- 网红法律咨询服务与权益保护创新创业项目商业计划书
- 教师招聘之《小学教师招聘》能力检测试卷附答案详解【综合题】
- 押题宝典教师招聘之《幼儿教师招聘》通关考试题库附参考答案详解【培优b卷】
- 教师招聘之《小学教师招聘》通关模拟卷及参考答案详解(基础题)
- 教师招聘之《小学教师招聘》题库检测模拟题及参考答案详解(a卷)
- 2025江西吉安市青原区司法局招聘2人笔试模拟试题及答案解析
- 2025年精准医疗领域:基因检测在罕见遗传病诊断中的应用准确性深度报告
- 2025年绿色建筑示范项目资金申请绿色建筑产业发展规划与战略报告
- 2024年典型事故案例警示教育手册15例
- DL∕T 853-2015 带电作业用绝缘垫
- DL5000-火力发电厂设计技术规程
- 中药郁金课件
- 农资创业项目计划书
- 环境标志产品技术要求 房间空气调节器(HJ 2535-2013代替HJ-T304-2006)
- 人工智能教育应用研究综述
- 生殖内分泌学
- 驾校教练员培训课件
- 冠寓公寓运营管理手册
- 人工智能 第2版 课件 AI12类脑智能
评论
0/150
提交评论