Android应用之加速度传感器
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.1.1 传感器是什么? • 分析:传感器就是一种特殊的外设,感受外界的 参数变化,然后反应到手机上面。{参数包括:磁 场、温度、压力、重力加速度、声音。} 5.1.2 传感器的分类有哪些? • 分析:按测量物理量分类 • 加速度传感器(accelerometer) • 陀螺仪传感器(gyroscope) • 环境光照传感器(light) • 磁力传感器(magnetic field) • 方向传感器(orientation) • 压力传感器(pressure) • 距离传感器(proximity) • 温度传感器(temperature)
layout布局文件(XML)代码
• • • • • • • • • • • • • • • • • • • • • • • • • • • <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="17dp" android:layout_marginLeft="83dp" android:text="X=" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView1" android:layout_below="@+id/textView1" android:text="Y=" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/textView2" android:layout_below="@+id/textView2" android:layout_marginTop="18dp" android:text="Z=" /> </RelativeLayout>
第5章 手机加速度传感器
• • • • • 5.1传感器sensor简介 5.2加速度传感器原理 5.3加速度传感器的基本认识 5.4加速度传感器的基本应用 5.5加速度传感器的实战应用
5.1传感器sensor简介
问: • 1)你是否听说过传感器? • 2)你对它有多少认识? • 3)你觉得它在未来有多少潜能?
传感器事件
• 1)加速度传感器元件焊到手机中供软件开发过程师使用。在编写 android程序时,需要注册加速度传感器。FrameworkAPI对加速度输 出进行封装,提供一个传感器类,我们就根据当前的传感器类型获得 需要的值。因为传感器的值是频率性的,即每固定毫秒返回一个值。 所以我们需要一个触发机制,要用事件监听。 • 2)当加速度传感器监测到手机加速度变化的时候,就会产生一个传 感器事件 • 3)传感器事件也是一个对象 • 4)应用程序从传感器事件对象获取这时刻的手机加速度
AndroidManifest.xml---分解2
• <uses-sdk • /*<uses-sdk> 元素允许配置我们的应用*/ • android:minSdkVersion="8" • /*指明该应用程序可以运行的API最低版本。默认是“1”。 */ • android:targetSdkVersion="15" /> • /*指明该应用程序设计时期望运行的目标API版本。这允许 应用程序使用目标API级别下定义的清单元素或行为,而不 是只限于使用最低API级别定义的内容。*/ • <application • /*一个AndroidManifest.xml中必须含有一个Application标签, 这个标签声明了每一个应用程序的组件及其属性(如 icon,label,permission等)*/
5.2加速度传感器原理
------以手机加速度传感器为例
5.2.1加速度传感器的结构 我们看到右图1,你是否回 忆起初高中物理课上学过 的弹簧测力计。
图1
• 分析:弹簧测力计的原理是弹簧伸长的长 度与施加在它上面的压力成正比。当我们 向上移动弹簧测力计时,弹簧就会由于惯 性拉伸,我们只需根据弹簧测力计的距离 既可以计算出重力。而我们的加速度计的 原理便是利用了这个。 • 你可以很直观感觉到,当我们有三个这样 的测力计,便能测出物体的三维运动方向 了。
• 如右图2:当y轴和z轴 水平时,只有x轴能读 出被拉伸的弹簧数据。 • 如右图3:当x轴和y轴 水平时,只有z轴能读 出弹簧被拉伸的数值 了。
图2
图3
思考:那么手机和芯片又是怎么检测重力的变化呢?
• 工程师用在芯片里用硅做 成的微小加速度计,样子 如图4: • 加速度传感器就是利用了 其内部芯片的由于加速度 造成的晶体变形这个特性。 由于这个变形会产生电压, 只要计算出产生电压和所 施加的加速度之间的关系, 就可以将加速度转化成电 压输出。
5.1.3传感器的作用有哪些? • 1)传感器是人类五官的延伸 • 2)获取准确可靠的信息,更好的研究自然现象和 规律以及生产活动 • 3)监视和控制生产过程中的各个参数,使设备工 作在正常状态或最佳状态,并使产品达到最好的 质量。 • 4)一些新机理和高灵敏度的检测传感器的出现, 往往会有边缘学科开发上的突破 • 5)让用户对智能手机更加着迷
AndroidManifest.xml---分解3
• • • • android:icon="@drawable/ic_launcher" /*声明整个APP图标,图片一般都放在drawable文件夹*/ android:label="@string/app_name" /*标签@string/app_name就是从string这个文件中引用叫 app_name的这个键值对的值,作用是为当前ViewGroup设 置一个标签*/ • android:theme="@style/AppTheme" > • /*是一个资源的风格,它定义了一个默认的主题风格给所有 的activity,当然也可以在自己的theme里面去设置它,有点 类似style。*/
图4
最后我们的手机加速度 传感器感应加速度的 方向大致如右图5: • X表示左右移动的加速 度 • Y表示前后移动的加速 度 • Z表示垂直方向的加速 度
图5
5.2.2加速度传感器获取数据
手机不同位置的加速度值: • 当将手机平放在水平面上,Z轴朝向天空,三轴加速度值 默认分别是(0,0,10) • 当X轴朝向天空,三轴加速度值分别是(10,0,0) • 当X轴朝向地面,三轴加速度值分别是(-10,0,0) • 当手机屏幕垂直竖立放置,Y轴朝向天空,(0,10,0) • 当手机屏幕垂直竖立放置,Y轴朝向地面,(0,-10,0) 总结:向上的就是正的,朝下的就是负的
/* 第一个参数为Listener实例,第二个参数为想接收 的传感器,第三个参数为接收频度*/
销毁
mSensorManager.unregisterListener(this);
/*来销毁一个传感器*/
动作处理过程
5.3加速度传感器的基本认识
• 5.3.1通过手机加速度传感器获取加速度 • 5.3.2通过手机加速度传感器获取加速度变化曲线
加速度传感器
手机应 用程序
距离传感器
温度传感器
传感器相关的类
sensorManager 通知数据变化
确定
sensor
sensorListener
提供
使用
sensorEvent
注册
mSensorManager.registerListener(this,mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
AndroidManifest.xml---分解4
• <activity android:name=".GravityActivity" • /*为应用程序所实现的Application子类的全名。当应用程序进程开始 时,该类在所有应用程序组件之前被实例化。*/ • android:label="@string/title_activity_gravity" > • <intent-filter> • <action android:name="android.intent.action.MAIN" /> • <category android:name="android.intent.category.LAUNCHER" /> • </intent-filter> • /*Intent filter内会设定的资料包括action,data与category三种。action 很简单,只有android:name这个属性。常见的android:name值为 android.intent.action.MAIN,表明此activity是作为应用程序的入口。 */
5.3.1通过手机加速度传感器获取加速度
思考:通过上面的讲解,你是否可 以自己动手写获取加速度的小程序 了呢?
AndroidManifest.xml结构
• • • • • • • • • • • • • • • • • • • • • <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.gravity" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".GravityActivity" android:label="@string/title_activity_gravity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
ABaidu NhomakorabeadroidManifest.xml---分解1
• <manifest xmlns:android="http://schemas.android.com/apk/res/and roid" • /*定义android命名空间,一般为 http://schemas.android.com/apk/res/android,这样使得 Android中各种标准属性能在文件中使用,提供了大部分 元素中的数据。*/ • package="com.example.gravity" • /*指定本应用内java主程序包的包名,它也是一个应用进 程的默认名称*/ • android:versionCode="1" • /*是给设备程序识别版本(升级)用的必须是一个interger值 代表app更新过多少次,比如第一版一般为1,之后若要更 新版本就设置为2……*/ • android:versionName="1.0" >/*这个名称是给用户看的, 可以将你的APP版本号设置为1.0版,后续更新版本设置 为1.1……*/