1、基于Android的短息备份毕业设计基于Android的短息备份毕业设计第一章 绪论1.1概述Android是一个开放、自由的移动终端平台。Android平台由操作系统、中间件、用户界面、应用软件组成。开发人员在该平台开发的应用程序,是使用Java语言编写的在Dalvik虚拟机上运行的。Android的底层以开放性的Linux kernel为其架构。也可以理解为Android是Google推出的智能手机操作系统和相关软件的总称。因此,它和一般在说Symbian、WindowsMobile是相同概念的。Google与开放手机联盟合作开发了 Android,这个联盟由包括中国移动、摩托罗拉、高通、
2、宏达电和 T-Mobile 在内的 30 多家技术和无线应用的领军企业组成,研发队伍阵容相当强大。而Android平台, Google集合30多家包括高通,摩托罗拉,三星,HTC等来自诸多领域的领先技术和无线公司组成开放手机联盟(OHA),共同努力开发Android平台。全球四大手机制造商中,已经有三家为Android提供硬件技术支持。在国内,中国移动已经加入OHA,并有机会成为第一家在中国运营Android手机的公司。联通也在今年的5月17日宣布加入OHA。中国的许多软件公司已经将目光投向了Android。首款基于Android平台的智能手机在2008年下半年推出。另外华为也已证实正在研发基
3、于Android平台的手机,目前已经制成样机。在目前,由于Android平台刚发布半年,系统还有许多需要充实的地方;但相信在未来几年中,Google Android将对移动产业带来较大的影响,Android会变得更加的强壮和易用。1.2研究的目的及意义 1992年,世界上第一条短信在英国沃达丰的网络上通过电脑向手机发送成功,从而宣布手机短信诞生。至于中国的第一条短信诞生于何时何地已无从知晓,但据考证,中国的移动通信网络早在1994年就具备了短信功能,只是那时有手机的人根本不需要它罢了。随着手机的日益普及,从1998年开始,移动、联通先后大范围拓展短信业务:2000年,中国手机短信息量突破10亿
4、条;2001年,达到189亿条;2004年,其飞涨到900亿条。于是短信理所应当地成为了第五种传播工具;于是从1998年至今,管你愿意与否,短信已逐渐走入我们的生活,成为生活的一部分,我们的生活也因短信而改变着。短信作为手机上的一种业务,让本来具有语言传递功能的手机变成了电报式的解读工具,让耳朵闲置,让文字彰显更大的作用;短信作为用文字传递信息和沟通的一种方式,让拇指灵敏发达起来,让嘴巴休息,现代电信的业务具有了技术和文化的双重色彩。尽管移动市场发展飞速,不过短信仍然是其最重要的一项附加价值服务。据此前IDC公司统计,文字短信仍是亚太地区手机用户普及率最高的一项移动服务,即使在短信的发展中市场
5、,例如西欧短信服务的使用率也达到了90%。而随着科技的日益发展,信息时代的到来,在人们使用手机的信息交流中,已渐渐离不开了短信,短信的重要性就越来越突出了。且在这个商品经济社会中人们常常会遇到一些重要的短信需要保留,所以短信备份就成为了一个重要的问题。 Android 是开放手机联盟开发的第一个完整、开放、免费的手机平台。自发布来得到了广泛关注和迅猛发展。而基于Android的短信备份,可以实现手机端、PC 端两个平台的资源交互共享,可与PC、手机进行信息导入导出,安全性显著提高,且您能将短信通过电子邮件直接群发给朋友、客户,便捷迅速。如此一来,要是手机出现什么意外,你也不用担心重要短信会丢失
6、了。1.3本文主要研究的内容本次毕业设计主要内容有:了解Android系统的短信存储机制和Java 语言解析XML文件知识,熟悉Java编程和Eclipse开发环境及其配置环境。通过Android的数据提供机制读取手机上的短信,并根据用户的选择将短信备份到文件,邮件甚至备份到在线文档中,同时要求提供主题备份及过滤备份(指定备份与指定人间的短信)的功能和定时备份功能。在此过程中掌握Android系统的开发方法与流程,了解Android系统的结构,提高学生的编程能力和设计动手能力,提高实践水平。第二章 Android架构 本章所要介绍的Android架构内容包括:Android平台的架构,Andr
7、oid的内核分析,Android应用的构成与工作机制,Android中的Intent以及Eclipse。以下就是对其相关内容的描述。2.1Android平台的架构 Android平台自底向上由以下四个层次组成:Linux内核层、Android运行时库和其他库层、应用框架层、应用程序层。如图1所示图1应用层程序应用程序框架其他库视频图像 视频播放浏览器 数据库运行时核心库Dalvik虚拟机Linux内核层Android平台的结构 (1) Linux内核层:Android基于Linux核来开发的,主要是添加了一个名为Goldfish的虚拟CPU以及Android运行所需的特定驱动代码。该层用来提供
8、系统的底层服务,包括安全机制、内存管理、进程管理、网络堆栈及一系列的驱动模块。作为一个虚拟的中间层,该层位于硬件与其它的软件层之间。需要注意的是,这个内核操作系统并非类GNULinux的,所以其系统库、系统初始化和编程接口都和标准的Linux系统有所不同的。它没有采用虚拟内存文件系统,而是采用YAFFS2文件系统。YAFFS(Yet Another Flash File System)文件系统是一个开源的,专门为NAND Flash设计的文件系统,具有很好的可移植性,也是一种日志型文件系统,能够在Linux,uCLinux,和Windows CE上运行。YAFFS目前有YAFFS和YAFFS2
9、两个版本,一般说来,YAFFS小页面(528字节/页)有很好的支持,而更大的页面(2K+64字节/页)就需要YAFFS2为新一代智能手机平台,Android需要支持超大容量的NAND Flash,所以采用支持大页面的YAFFS2文件系统。(2)Android运行时库和其他库层:Android运行时库包含一组核心库(提供了Java语言核心库内的大部分功能)和Dalvik虚拟机。同时Android提供了丰富的库类支持且大部分为开源代码,如采用的数据库为SQLite。Android选择它作为移动终端的嵌入式数据库有以下优点,它无需安装和管理配置,它是一个储存在单一磁盘文件中的完整数据库,体积小只有2
10、50KB但支持数据库大小至2KB,提供了对事务功能和并发处理的支持,而且比目前流行的大多数数据库运行速度快。(3)应用框架层:在应用框架层Android开发人员可以跟那些核心应用一样拥有访问框架API的全部权限。应用的系结构化设计简化了各组件之间的重用,任何应用都可以分发自己的组件,任何应用也可以使用这些分发的组件(应用的使用方法需遵循框架的安全性约束)。(4)应用程序层:Android本身会附带一些核心的应用程序,包括email客户端、短信程序、日历、地图、浏览器、通讯录等等,目前所有的应用程序都是由Java语言开发的。2.2Android的内核分析(1)内核在操作系统中的地位Android
11、基于Linux操作系统,由硬件、系统内核、系统服务和应用程序等四大部分组成。其中,内核Kernel是最核心的部分,其主要作用在于与计算机硬件进行交互,实现对硬件的编程控制和接口操作,调度访问硬件资源,同时向应用程序提供一个高级的执行环境和对硬件的虚拟接口。主要功能包括:中断服务程序、进程调度程序、进程地址空间的内存管理、进程间通信。内核与普通应用程序不同,其拥有所有硬件设备的访问权限以及启动时即划分的受保护的内存空间同。(2)Android内核和标准的Linux内核一样,Android内核主要实现内存管理、进程调度、进程间通信等功能。Android内核是在标准Linux内核的基础上修改而成。为
12、了适应嵌入式硬件环境和移动应用程序的开发。Android对Linux内核进行了一定的修改。Android内核源码树根目录结构如表1所示。描述arch特定体系结构的源码cryptoCrypto APIdocumentation内核源码文档divers设备驱动程序fsVFS和各种文件系统include内核头文件init内核引导和初始化ipc进程间通信代码kernel核心子系统lib通用内核函数mm内存管理模块net网络模块scripts编译内核所用的脚本security安全模块sound声音模块user早期用户空间代码表2-2-1 内核源码树目录结构Android内核与标准Linux内核在文件系统
13、、进程间通信机制、内存管理、电源管理、驱动和其他方面存在不同。1 文件系统不同于桌面系统与服务器,移动设备大多采用的不是硬盘而是采用Flash作为存储介质,因此,Android内核中增加了标准Linux内核中没有采纳的YAFFs2文件系统。YAFFS2(Yet Another flash File Sy-stem,2nd edition)是专用于flash的文件系统,对NAND,F1ash芯片有着良好的支持。YAFFs2是日志结构的文件系统,提供了损耗平衡和掉电保护,可以有效地避免意外断电对文件系统一致性和完整性的影响。YAFFS2按层次结构设计,分为文件管理接口、内部实现层和NAND,简化了
14、其本身与系统的接口设计能更方便地集成到系统当中。经过测试证明YAFFs2性能比支持NOR型闪存的JFFS2文件系统优秀。2 程问通信机制Android增加了一种进程间的通信机制IPC Binder在内核源代码中,驱动程序文件为coredroid/include/linux/binder.h和coredroid/drivers/android/binder.c。Binder通过守护进程Service Manager管理系统中的服务,负责进程问的数据交换。各进程通过Binder访问同一块共享内存,以达到数据通信的机制。从应用层的角度看进程通过访问数据守护进程获取用于数据交换的程序框架接口,调用并通
15、过接口共享数据,而其他进程要访问数据,也只需与程序框架接口进行交互方便了程序员开发需要交互数据的应用程序。3 存管理在内存管理模块,Android内核采用了一种不用于标准Linux内核的低内存管理策略。在标准Linux内核当中,使用一种叫做00M(0ut of Memorv)的低内存管理策略:当内存不足时,系统检查所有的进程,并对进程进行限制评分获得最高分的进程将被关闭(内核进程除外)。Android系统采用的则是一种叫作LMK(Low Memory Killer)的机制,这种机制将进程按照重要性进行分级、分组。内存不足时,将处于最低级别组的进程关闭。例如在移动设备当中。UI界面处于最高级别。
16、所以该进程永远不会被中止,这样,在终端用户看来,系统是稳定运行的。在Android内核源码中,LMK的位置是coredroid/drivers/misc/lowmemorykiller.c。与此同时,Android新增加了一种内存共享的处理方式Ashmem(Anonvmous Shared Memory,匿名共享内存)。通过Ashmem,进程间可以匿名自由共享具名的内存块。这种共享方式在标准Linux当中不被支持。Ashmem分配和使用情况如下:fd=ashhmem_create_region(“my-shmregion”,size);if(fd0)return l;data=mmap(NUU
17、LL,size,PROT_READPROT_WRITE,MAP_SHARED,fd,0);if(data=MAP_FAILED)goto out;但出于安全原因,其他进程无法访问此名称(my_shmregion)区域。文件描述符指向该共享内存区域,实际上是通过IPC绑定接口。在Android内核源码中,Ashmem的位置是coredroid/mm/ashmem.c。4 源管理由于Android主要用于移动设备,电源管理就显得尤为重要,因此,在Android内核当中。增加了一种新的电源管理策略。目前,Android采用的是一种较为简单的电源管理策略,通过开关屏幕、开关屏幕背光、开关键盘背光、开关
18、按钮背光和调整屏幕亮度来实现电源管理,并没有实现休眠和待机功能。有三种途径判断调整电源管理策略:RPC调用、电池状态改变和电源设置。它通过广播Intent或直接调用API的方式来与其他模块进行联系。电源管理策略同时还有自动关机机制,当电力低于最低可接受程度时,系统将自动关机。Android的电源管理模块还会根据用户行为,自动调整屏幕亮度。 5 驱动及其它相对于标准内核,Android内核还添加了字符输出设备、图像显示设备、键盘输入设备、RTC设备、USB Device设备等相关设备驱动。增加了日志(Logger)系统,使应用程序可以访问日志消息。2.3Android应用的构成与工作机制一个An
19、droid应用程序是由四种构造块组织而成的,这四种构造块分别是: Activity Intent Receiver Service Content Provider并不是每一个Android应用程序都需要这四种构造块,这不是必须的,某些时候,只需要这四种中的几种就可以组合成应用程序。除此以外,还需要在AndroidMainfest.xml中登记这些构造块的清单。这是一个XML配置文件,这个配置文件用于定义应用程序的组件、组件的功能及必要条件等。这个配置文件是每个Android应用必需的。而以下为其构成与工作流程。图2-3-1 Android的构成与工作流程以下,对四种构造块做一些说明: Act
20、ivityActivity是Android构造块中最基本的一种,在应用中,一个activity通常就是一个单独的屏幕。每一个activity都被实现为一个独立的类,并且继承于Activity这个基类。这个activity类将会显示由几个Views控件组成的用户接口,并对事件做出响应。大部份的应用都会包含多个的屏幕。例如,一个通信应用程序将会有一个屏幕用于显示联系人列表,第二个屏幕用于写信息,同时还会有用于浏览信息及进行系统设置的屏幕。每一个这样的屏幕,就是一个activity。从一个屏幕可以方便的导航到另一个屏幕。在一些应用中,一个屏幕甚至会返回值给前一个屏幕。当一个新的屏幕打开后,前一个屏幕
21、将会暂停,并保存在历史堆栈中。用户可以返回到历史堆栈中的前一个屏幕。当屏幕不再使用时,还可以从历史堆栈中删除。默认情况下,Android将会保留从主屏幕到每一个应用的运行屏幕。Android使用了Intent这个特殊类,实现在屏幕与屏幕之间移动。Intent类用于描述一个应用将会做什么事。在Intent的描述结构中,有两个最重要的部分:动作和动作对应的数据。典型的动作类型有:MAIN(activity的门户)、VIEW、PICK、EDIT等。而动作对应的数据则以URI的形式进行表示。例如:要查看一个人的联系方式,就需要创建一个动作类型为VIEW的intent,以及一个表示这个人的URI。与之有
22、关系的一个类叫IntentFilter。相对于intent是一个有效的做某事的请求,一个intent filter则用于描述一个activity(或者Intent Receiver)能够操作哪些intent。一个activity如果要显示一个人的联系方式时,需要声明一个IntentFilter,这个IntentFilter要知道怎么去处理VIEW动作和表示一个人的URI。IntentFilter需要在AndroidMainfest.xml中定义。通过解析各种intent,完成从一个屏幕导航到另一个屏幕。当向前导航时,activity将会调用startActivity(Intent myInte
23、nt)方法。然后,系统会在所有安装的应用程序中定义的IntentFilter中查找,找到最匹配myIntent的Intent对应的activity。新的activity接收到myIntent的通知后,开始运行。当startActivity方法被调用将触发解析myIntent的动作,这个机制提供了两个关键好处:A、Activities可重复利用从其它组件中以Intent的形式产生的一个请求。B、Activities可以在任何时候被一个具有相同IntentFilter的新的Activity取代。 Intent Receiver当需要对一个外部事件(如当电话呼入,或者数据网络可用)做出响应时,可以使
24、用一个Intent Receiver。Intent Receiver在外部事件发生时,会使用NotificationManager通知用户,但它并不能生成一个UI。Intent Receiver在AndroidManifest.xml中注册,也可以在代码中使用Context.registerReceiver()进行注册。当一个intent receiver被触发时,系统会在需要的时候对应的程序。各种应用还可以通过使用Context.broadcastIntent()将它们的intent receiver广播给其它应用程序。 Service一个Service是一段长生命周期的,没有用户界面的程序
25、。例如,一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity,让用户可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的activity,因为用户会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service一直执行,直到这个service运行结束。另外,还可以通过使用Context.bindService()方法,连接到一个service上(如果这个service还没有运行将启
26、动它)。当连接到一个service之后,使用service提供的接口与它进行通讯。拿媒体播放器这个例子来说,还可以进行暂停、重播等操作。 Content Provider应用程序能够将它们的数据保存到文件中、SQL数据库中,甚至是任何有效的设备中。当需要将应用数据与其它的应用共享时,使用Content Provider来完成。一个Content Provider类实现了一组标准的方法,从而能够让其它的应用保存或读取此Content Provider处理的各种数据类型。2.4Android中的Intent在一个Android应用中,主要是由四种组件组成的,这四种组件是独立的,它们之间可以互相调用
27、,协调工作,最终组成一个真正的Android应用。在这些组件之间的通讯中,主要是由Intent协助完成的。Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。2.4.1抽象描述的内容在Android参考文档中,对Intent的定义是执行某操作的一个抽象描述。首先,是要执行的动作(action)的一个简要描述。其次,是执行动作要操作的数据(data),An
28、droid中采用指向数据的一个URI来表示。另外,除了action和data这两个重要属性外,还有一些附加属性:category(类别),被执行动作的附加信息。type(数据类型),显式指定Intent的数据类型(MIME)。一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型而不再进行推导。component(组件),指定Intent的的目标组件的类名称。通常Android会根据Intent中包含的其它属性的信息,比如action、data/type、category进行查找,最终找到一个与之匹配的目标组件。但是,如果component这个属性
29、有指定的话,将直接使用它指定的组件,而不再执行上述查找过程。指定了这个属性以后,Intent的其它所有属性都是可选的。extras(附加信息),是其它所有附加信息的集合。使用extras可以为组件提供扩展信息,比如,如果要执行“发送电子邮件”这个动作,可以将电子邮件的标题、正文等保存在extras里,传给电子邮件发送组件。总之,action、data/type、category和extras一起形成了一种语言。这种语言使系统能够理解诸如“查看某联系人的详细信息”之类的短语。随着应用不断的加入到系统中,它们可以添加新的action、data/type、category来扩展这种语言。应用也可以提
30、供自己的Activity来处理已经存在的这样的“短语”,从而改变这些“短语”的行为。2.4.2 Android解析Intent的过程在应用中,我们可以以两种形式来使用Intent:A、直接Intent:指定了component属性的Intent(调用setComponent(ComponentName)或者setClass(Context,Class)来指定)。通过指定具体的组件类,通知应用启动对应的组件。B、间接Intent:没有指定comonent属性的Intent。这些Intent需要包含足够的信息,这样系统才能根据这些信息,在在所有的可用组件中,确定满足此Intent的组件。对于直接I
31、ntent,Android不需要去做解析,因为目标组件已经很明确,Android需要解析的是那些间接Intent,通过解析,将Intent映射给可以处理此Intent的Activity、IntentReceiver或Service。Intent解析机制主要是通过查找已注册在AndroidManifest.xml中的所有IntentFilter及其中定义的Intent,最终找到匹配的Intent。在这个解析过程中,Android是通过Intent的action、type、category这三个属性来进行判断的,判断方法如下: 如果Intent指明定了action,则目标组件的IntentFilt
32、er的action列表中就必须包含有这个action,否则不能匹配; 如果Intent没有提供type,系统将从data中得到数据类型。和action一样,目标组件的数据类型列表中必须包含Intent的数据类型,否则不能匹配。 如果Intent中的数据不是content:类型的URI,而且Intent也没有明确指定它的type,将根据Intent中数据的scheme(比如http:或者mailto:)进行匹配。同上,Intent的scheme必须出现在目标组件的scheme列表中。 如果Intent指定了一个或多个category,这些类别必须全部出现在组建的类别列表中。比如Intent中包含了两个类别:LAUNCHER_CATEGORY和ALTERNATIVE_CATEGORY,解析得到的目标组件必须至少包含这两个类别。2.5 E
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1