基于android的重力传感器控制手机录音功能的设计与实现Word文档格式.docx
《基于android的重力传感器控制手机录音功能的设计与实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于android的重力传感器控制手机录音功能的设计与实现Word文档格式.docx(48页珍藏版)》请在冰豆网上搜索。
Android系统大致可分为四部分,框架层、应用层、硬件抽象层、Linux驱动层,还有一些小插件,Android系统的感应器模块涉及到了Android系统的各个层次。
应用层以Java语言为编程语言,一般为第三方开发的应用程序,也有一些是Google自己开发的应用程序,框架层是Google自己开发的,提供完善的接口,有着完整代码的体系,以便第三方开发应用程序。
硬件抽象层是能以封闭源码形式提供硬件驱动模块,能把驱动层与框架层隔离开,使得Android框架层的开发能在完全不考虑驱动程序的前提下运行。
驱动层会根据硬件的设计对传感器进行寄存器和初始化的读写,使得传感器能够正常工作。
本文以实现一块开发板上的Android传感器模块开发为背景,研究传感器在硬件抽象层和驱动层的工作过程和原理,帮助用户能够更好的理解和尽快的使用Android感应器相关问题。
1.2国内外研究现状
Android是Google公司由2007年11月5日公布的基于Linux内核的智能手机操作系统。
2008年9月Google和HTC(宏达)联合推出的T-MobileG1,是第一部Android系统的智能手机,它支持WCDMA网络,并支持WIFI。
凭借Google的技术支持及其开源特性,Android系统迅速占领大量的市场,从最初主要支持手机逐渐扩展到台式电脑笔记本电脑及其他领域上,Android的主要竞争对手是苹果公司的IOS以及RIM的BlackberryOS。
2013年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一,2014年3月数据显示,Android大约占据全球智能手机操作系统市场52.4%的份额,中国市场占有率为68.5%,随着智能手机的逐渐普及和Android系统的应用程序增加,这个比例也会随之增加。
2相关技术介绍
2.1Android系统框架
Android系统是基于Linux内核,用于智能手机的操作系和统软件平台,它采用软件堆层的形式,主要包括三大部分:
底层基于Linux的操作系统、中间层的中间件(MiddleWare)、上层的一些Java关键应用程序,上层开发人员可以使用软件开发包JDK来开发各种应用程序。
并用AndoridSDK模拟器来运行。
Android操作系统的框架如图2-1所示,从图中可以清楚看出Android系统自上而下分别应用层、标准库层、应用框架层、硬件抽象层和内核层五层。
●
图21Android操作系统的框架图
1).应用层
Google发布Android的同时,还同时发布了一些核心的应用程序,如地图、E-mail客户端、日历、短信、联系人等等。
所有的应用程序都是用Java语言编写的,这些代码都是开源的,开发者可以修改这些应用,也可以基于AndroidSDK开发自己的应用。
在Android平台中,根据完成的功能不同,Android划分了四类核心的组件类:
Activity、Service、BroadcastReceiver和ContentProvider。
相同组件和不同组件之间通过Intent来完成。
Activity(活动组件):
是最基本也是最常用的组件,在Android应用中,一个Activity一般就是一个独立的界面。
每一个Activity都是一个继承Activity基类的一个独立的类,每一个Activity都有很完整的生命周期,Android平台中对活动组件的管理是通过堆栈进行的,当一个新的Activity起来之后,前一个Activity就会自动暂停,并会自动保存在堆栈之中。
Service(服务组件):
Service与Activity不同,它是一种长生命周期但是它没有用户界面的程序。
BroadcastReceive(广播接收组件):
为实现系统广播而提供的一种组件。
ContentProvider(内容提供者组件):
实现不同组件之间数据的共享。
2).标准库层
Android包含一个C/C++库集,当使用Android应用框架时,这些C/C++库集会支持我们使用的各个组件。
Bionic系统C库:
C语言的标准库,系统最底层的的库,通过Linux系统来调用。
3).应用框架层
应用框架层是Google发布中的最核心的应用是所使用的API框架,开发人员也可以使用这些框架来开发自己的程序。
所有Android应用程序都是由一系列服务和系统组成,包括:
(1)视图组件(Views),包括文本框、网格、列表、按钮等等,开发者可以使用这些组件来开发应用程序;
(2)内容管理器(ContentProviders):
应用程序之间的数据互通;
(3)资源管理器(ResourceManager):
提供非代码资源的访问,比如图片;
(4)通知管理器(NotificationManager):
应用可以在运行状态中显示自定义的提示信息;
(5)活动管理器(ActivityManager):
用来管理应用程序的生命周期;
(6)窗口管理器(WindowManager):
管理所有应用的窗口程序;
(7)包管理(PackageManager):
Android系统内的程序管理;
2.2Linux内核相关简介
Android是基于Linux操作系统的,它的内核结构和Linux2.6的内核结构大致相同。
Linux操作系统是Android系统的最底层,包括Linux内核和Linux驱动程序。
为了更好的了解Android系统,首先介绍一下Linux内核相关概念。
2.2.1Linux内核的介绍
Linux是一个用C语言编写的类UNIX电脑操作系统,由于一些特性,Linux成为现今最被广泛移植的操作系统。
Linux是一个庞大而又复杂的系统,它具有现代操作系统所具有的所有的内容,它的基本体系结构如图2-2所示。
图22Linux体系结构
从上图中可以看出系统应用程序和一些属于用户的存储空间,内核和驱动程序属于内核空间,用户空间和内核空间都指的是虚拟空间。
Linux为了简化这种分段机制,使虚拟地址和物理地址保持一致,目前32位的操作系统中,虚拟空间的大小也为0~4G,从虚拟地址0x00000000到0xBFFFFFFF提供给用户使用,称为用户空间,从虚拟地址0xC0000000到0xFFFFFFFF供内核使用,称为内核空间。
用户空间和内核空间之间不能同时访问,系统提供了一系列函数来帮助完成空间转换,如copy_from_user,copy_to_user。
2.2.2Linux驱动的介绍
设备驱动最通俗的解释就是“驱使硬件设备行动”。
驱动与底层硬件直接打交道,按照硬件设备的具体工作方式,读写设备的寄存器,完成设备的中断处理、DMA通信,进行物理内存向虚拟内存的映射等,最终让通信设备能够收发数据,让显示设备能够显示文字和画面,让存储设备能够记录文件和数据。
内核是操作系统最基本的部分,而操作系统是不能够直接来控制硬件的,这样就需要通过设备的驱动来联系操作系统和硬件设备。
驱动程序是一个小型的系统级程序,它能够使硬件和软件与操作系统这3者建立联系,驱动程序负责将操作系统的请求传输硬件设备,转化为物理设备能够理解的命令,使操作系统能够正常运行并启用该设备。
所以驱动需要完成两大功能:
1)、为Linux内核提供调用接口;
2)、控制硬件。
驱动程序通过读写硬件寄存器来达到控制硬件的目的;
由于硬件设备的多样性,Linux将所有设备分为块设备、字符设备、网络设备三大类。
字符设备是指以字节为单位进行传输的设备,如触摸屏,传感器等,字符设备的驱动通常都要实现open()、close()、read()和write()等函数。
块设备以快为单位来进行传输的,一块一般为512字节或1k字节。
块设备通过内存缓冲区访问,如SD卡,硬盘等。
块设备只支持以块为单位的访问方式,如磁盘等.KYLIN支持以字符方式来访问块设备,即支持以字符为单位来读写磁盘等块设备。
所以在/dev目录中的块设备,如磁盘等,均以字符设备的外观出现。
所以,字符设备和块设备的区别主要体现在KYLIN内核中的管理方式,操作方式和内核/设备驱动接口上。
网络设备是连接到网络中的物理实体。
网络设备的种类繁多,且与日俱增。
基本的网络设备有:
集线器、计算机(无论其为个人电脑或服务器)、交换机、网桥、路由器、网关、网络接口卡(NIC)、无线接入点(WAP)、打印机和调制解调器。
2.3Android开发环境搭建
本文的传感器模块的开发,是在以Android系统的手机上进行的,所以需要相应的软硬件环境,首先需要一台Android系统的手机,并且这台手机上要有重力感应系统的硬件,好需要一台电脑来开发程序,并在这台电脑上面配置软件环境。
Android开发平台搭建步骤:
1)JDK安装
2)Eclipse安装
3)AndroidSDK安装
4)ADT安装
5)创建AVD
(1)JDK安装
在官网中下载JDK下载完成之后安装;
设置环境变量:
我的电脑->
属性->
高级->
环境变量->
系统变量中添加以下环境变量:
JAVA_HOME值为:
D:
\ProgramFiles\Java\jdk1.6.0_18(你安装JDK的目录)
CLASSPATH值为:
.;
%JAVA_HOME%\lib\tools.jar;
%JAVA_HOME%\lib\dt.
jar;
%JAVA_HOME%\bin;
Path:
在开始追加%JAVA_HOME%\bin;
设置完环境变量之后再命令管理器输入java–version出现如图2-3所示表示环境变量设置成功。
图23检测JDK是否安装成功
(2)Eclipse安装
在官网中下载Eclipse软件,安装即可。
(3)AndroidSDK安装
AndoridSDK为Android管理开发包工具,提供了Android各级平台的开发包和工具。
注意,因为我们是独立安装,不是一体化(集成系列工具)所以需要单独下载SDK。
运行安装文件,并把安装目录下tools文件夹路径设置进PATH环境变量。
去到安装目录运行SDKManager,一开始什么平台和工具也没有,需要手动安装需要用到的工具:
AndroidSDKTools,revisionx;
AndroidSDKPlatform-tools,revisionx;
DocumentationforAndroidSDK,APIxx,revisionx;
SDKPlatformAndroidx,APIx,revisionx;
SamplesforSDKAPIx,revisionx;
AndroidCompatibilitypackage,revisionx;
d
上面的这些都完成之后就可以开始安装ADT插件了。
(4)ADT安装
启动Eclipse,点击Help菜单InstallNewSoftware,点击Add,输入地址:
http:
//dl-
选取要安装的项,一路Next完成安装并重启。
这样ADT就安装完毕了。
配置ADT:
选择Window->
Preferences,在弹出面板中就会看到Android设置项,填上安装的SDK路径,则会出现刚才在SDK中安装的各平台包,按OK则完成配置。
此时Android的环境就搭建完毕,可以进行Android项目的开发了。
(5)创建AVD
选择File->
New->
Other->
Android->
AndroidApplicationProject。
输入项目所需信息
ApplicationName(应用的名称)
ProjectName(在Eclipse中该项目的名称)
PackageName(存放Java类的包名称,其实质是存放的文件夹路径,‘.’号为文件分隔符,我们编写的Java文件都会放在项目的src目录下,如com.tencent.helloworld表示类放在src/com/tencent/helloworld文件夹中)一路Next直到Finish,则我们的工程创建完毕。
2.4Android的API
开发Android应用程序时,了解该平台API变更管理的基本方法和概念是非常有帮助的。
同样的,在知道了API的级别标识以及该标识如何来保障应用与实际硬件设备相兼容,对于程序的开发及后续的发布、维护都是有益的。
Android里面的API级别取值都是一个整数值,而且它是唯一一个标识了一个具体的版本Android平台,以及框架的API的版本。
Android平台为广大的开发者提供了一整套完整框架的API,使得Android平台上的应用程序可以与系统底层进行交互。
API由以下一些模块组成:
(1)一组核心的包和类;
(2)清单(Manifest)文件的XML元素和属性声明;
(3)资源文件的XML元素和属性声明及访问形式;
(4)各类意图;
(5)应用程序可以请求的各类授权,以及系统中包含的授权执行;
每个Android平台的后续版本会包括它提供的更新Android的应用程序框架的API。
该框架的API的更新设计,使高版本的API与早期的版本兼容。
也就是说,在新版本大多数的API都是新增功能,和引进新的功能或替代的功能。
作为API的升级部分,老的替换的部分已过时,但不会在新版本中删除,使得现有的应用程序仍然可以使用它们。
在极少数情况下,旧版本API的部分可能被修改或删除,通常这种变化是为了保障API的稳定性及系统或应用程序的安全。
其他所有早期版本的API将不做修改的保留。
Android:
minSdkVersion:
指明这个应用程序可以运行的API最低版本,默认是“1”。
targetSdkVersion:
指明这个应用程序设计时期所运行的目标API版本。
在某些情况下,这允许应用程序使用目标API级别下定义的清单元素或行为,而不是只限于使用最低API级别所定义的内容。
maxSdkVersion:
指明这个应用程序可以运行的最高API级别。
重要声明:
使用这个属性之前请阅读该文档。
比如,要指明一个应用程序能够运行的最低API级别,应当在这个应用程序的清单文件的元素中加入Android:
minSdkVersion属性。
minSdkVersion的值是一个正整数,对应的是这个应用程序能够运行的最低平台的API级别标识。
用户要尝试安装一个应用程序,或者在系统升级后重新验证应用程序的时候,Android系统首先会检查应用程序的,将这个清单文件中的属性与系统内部API级别对比。
系统只有在满足下列情况时才会允许进行应用程序安装。
如果声明了Android:
maxSdkVersion的属性,那么这个属性值就要必须等于或大于这个系统的API级对应的值。
如果系统没有发表声明,那么系统会默认这个应用程序没有最高API的级别限制。
2.5Android基本框架
图24AndroidArchitecture(android软件结构图)
其软件层次结构自上而下分为以下几个层次:
第一、应用程序(Application);
第二、应用程序框架(ApplicationFramework);
第三、各种库(Libraries)和Android运行环境(RunTime);
第四、操作系统层;
(1)Application
ApplicationAndroid会同一核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。
所有的应用程序都是用JAVA编写的。
(2)ApplicationFrameWork
开发者完全可以访问核心应用程序所使用的API框架。
该应用程序架构用来简化组件软件的重用;
任何一个应用程序都可以发布它的功能模块并且任何其他的应用程序都可以使用他所发布的功能块(不过的遵循框架的安全性限制)。
该应用程序重用机制使得组件可以被用户替换。
所有的应用程序都由一系列的服务和系统组成,包括:
可扩展的视图(Views)可以用来建应用程序,包括列表(lists),网格(Grids),文本框(Textboxes),按钮(button),甚至包括另一个可嵌入的web浏览器。
内容管理器(ContentProviders)使得应用程序可以访问另一个应用程序的数据(如联系人的数据库),或者共享它们自己的数据。
资源管理器(ResourceManager)提供非代码资源的访问,如本地字符串,图形,和分层文件(LayoutFiles)。
知管理器(NotificationManager)使得应用程序生可以在状态栏中显示客户通知信息。
活动类管理器(ActivityManager)用来管理应用程序生命周期并提供常用的导航回退功能。
(3)Libraries库
Android包括一个被Android系统中各种不同组件所使用的C/C++库集。
该库通过Android的应用程序框架为开发者提供服务。
Android包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。
每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。
Dalvik是针对于同时高效地运行多个VMS来实现的。
Dalvik虚拟机执行.dex的Dalvik可执行文件,该格式文件针对最小内存的使用做了优化。
该虚拟机是基于寄存器的,所有的类都经由JAVA汇编器编译,然后通过SDK中的dx工具转化成.dex格式由虚拟机执行。
Dalvik虚拟机依赖于linux的一些功能,比如线程机制和底层内存管理机制。
(4)Linux内核
Android的核心系统服务依赖于Linux2.6内核,如安全性,内存管理,进程管理,网络协议和驱动模型。
Linux内核也同时作为硬件和软件堆栈之间的硬件抽象层。
3方案设计
3.1系统分析
3.1.1研究目标
(1)学习、了解Android应用程序的设计并且基础掌握其开发