第一章绪论
1.1研究背景
智能手机(Smartphone),指的是“用户个人平时使用的手持电话设备具有自身独立的操作系统,用户可以根据自己的日常实际需求从第三方软件供应商获取相应的手机应用程序来不断扩展设备的功能,同时还可以通过无线发射器及移动通讯塔来完成网络接入操作的手机总称”。从世界范围来看,大型智能手机制造商主要有:中国大陆的华为、中国X省的HTC、加拿大的黑莓以及X的苹果公司,目前智能手机市场的国际竞争非常激烈。
下面罗列智能手机具备的五项主要功能:①拥有自身独立研发的操作系统,从理论上来说,设备具有较强的开放性,用户可以通过安装应用程序的方式进一步扩展手机的功能;②在3G、CDMA或GPRS等不同的网络制式下具有较强的无线接入能力;③具备一定的移动办公能力,能够完成用户日常所需的多媒体应用、日程安排、网页浏览以及个人信息管理等功能;④对于第三方应用程序的兼容性与扩展性也比较好;⑤设备的人性化扩展能力有较大的提升,可以根据用户生活与工作的实际情况来配置满足自身需要的个性化手机应用系统。
Andy Rubin是Android操作系统的最初开发者,当时主要是应用于移动电话操作系统的研发过程中,程序编写使用的是Linux语言,后经谷歌公司与开放手机联盟共同合作开发,Android逐渐成长为在全球智能手机市场可以与RIM黑莓操作系统及苹果IOS操作系统相抗衡的重要力量。中国内地智能手机用户也称其为“安卓”或“安智”系统。2011年第一季度,Android迎来了其发展历史上的重要里程碑,在全球手机市场占有率超越诺基亚的symbian。2012年2月,Android占全球智能手机操作系统市场的52.5%,中国占有率为高达68.4%[2]。
伴随着移动互联网技能的不断提高,人们对手机的使用也越来越多。手机通讯录作为人们日常借助手机进行沟通的主要形式,正受到越来越多手机服务运营商的重视,从国内手机通讯录应用服务商的分布情况来看,主要有三种类型:①突出个性化的手机号码备份服务,有效解决用户在使用手机记录常用联系人号码时出现的各类问题,比较有代表性的产品为QQ通讯录、火种等;②在日常生活场景中,用户之间经常需要快速完成名片交换,针对用户在输入过程中遇到的一些问题,部分手机软件研发公司推出了专业的应用程序为客户解决这类难题,但由于缺乏稳定的开发能力,很难得到网络服务运营商的支持;③直接将手机通讯录及相关功能移植到对应的手机应用软件当中,如目前人们常用的微信,且手机开发商为了进一步提升软件的市场竞争力,不断增加在软件开发方面的资金投入[5]。
1.2研究现状
当前,经济社会的高速发展促使人们的日常生活节奏不断加快,对于信息交换及数据传输的速度要求也越来越高,在这种情况下,用户对于智能手机操作系统体验度的好坏,很大程度上将会决定相应智能手机制造商的市场发展前景。Windows Mobile与Symbian在目前的智能手机市场已经逐渐被淘汰,但作为曾经在智能手机操作系统领域红极一时的代表产品,它们对于智能手机的发展产生了重大的影响。从系统开发所使用的代码来看,Symbian封闭性较强,而Android由于采用了开源性的Linux程序设计语言,所以可以吸引大量的软件开发爱好者参与到系统的设计过程中,一定程度上加快了系统自我优化与完善的速度,这是Symbian操作系统无法与之比拟的。而从系统开发的成本投入来看,由于各类应用厂商需要向微软公司支付一定数额的Windows Mobile使用费用,客观上提高了操作系统开发的门槛,短期来看,微软公司确实可以获得数目不菲的版权收益,但是从长远来看,对于Windows Mobile操作系统的优化成熟是非常不利的,事实证明这也确实导致了该系统最终被市场所弃用的结局。而Android操作系统有效弥补了两者的固有缺陷,经过多年的发展,在系统开放性、研发成本以及用户体验度等多方面通过了严格的市场考验,同时将移动互联网相关产业紧密的结合起来,提升了智能手机市场的整体效益。
由于Android操作系统在开发过程具有极强的开源性,不仅可以满足用户的个性化需求,还能够根据企业发展运营的实际要求对系统进行深度定制,目前,各类Android应用商店层出不穷,为广大Android系统用户在设备功能的拓展方面带来了极大便利,这些都推动了Android相关市场的快速发展,吸引更多的软件开发厂商进入该领域,进一步提高了Android操作系统的在智能手机市场的占有率[7]。
当然消费者选择Android相关产品的出发点主要在于其高性价比与优良的用户体验。
近年来,Android产品市场的迅猛发展有效拉动了相关人才的就业,出现了供不应求的情况,且在软件应用方面的缺口更为突出。具体来看,Android手机终端应用程序及游戏类软件公司在招聘过程中对相关人员的需求量更大[8]。
从人才培养的角度来看,Android相关产品的发展方兴未艾,在相当长的一段时间内,市场对于Android研发人才的需求还将保持较高的水平,且从Android技术自身的发展规律来看,相关的基础理论及开发模式还处于优化及完善阶段,因此,未来Android相关产品的人性化设计及用户满意度将有更大的提升,令人期待。所以,不难理解越来越多的软件开发人员将Android产品研发作为自己职业发展的长远方向。
信息化时代背景下,人与人之间的沟通方式更加多样,每个人都不可能脱离开所在的社会环境独立生存。电话簿、名片等传统的通讯录管理方法已经越来越难以满足人们对于日常联系人便捷管理的需求,且个人手机通讯录管理具有一定隐私性,软件开发公司需要获得用户授权后才能在智能手机客户端运行相关的程序,总体来看,通过不断优化与完善手机通讯录相关软件,不仅可以有效提升人与人之间的沟通效率,还便于构建起强大的人际交流网络[10]。个人手机通讯录涉及的信息主要有办公、商业及个人三种类型,在软件设计过程中要强化联系人的分类及行业特点,有助于用户快速准确地从庞杂的通讯录系统中搜索到所需的信息;同时,通讯录管理系统借助智能手机小巧的外形非常容易随身携带,且不容易造成个人信息的泄露,具有很强的安全性。
目前,很多智能手机应用程序开发商都将研发重点放到了通讯录管理系统的研发上来,为了进一步提升用户的操作体验,除了继续保持手机通讯录的常规功能外,还优化扩展了一些新的功能,比如资料备份、视频通话、邮件发送等,同时还删除了一部分繁琐且形式化的操作,便于老年人及低龄儿童使用,使通讯录管理系统的设计更加人性化。
1.3主要工作
为了达到上述设计要求,并充分考虑用户的实际需要,在充分发挥Android操作系统自身特色的基础上,研发一款高效实用的手机通讯录应用程序。
软件设计的主体框架以View为主,同时结合使用了Android中其他相关组件。
添加联系人信息作为手机通讯录软件的主体功能之一,需要借助XML布局文件中的相对布局RelativeLayout功能来实现,一般情况下除了联系人的姓名与手机号码等主要信息外,还有一些附属信息需要同步进行录入,比如单位名称、邮政编码、办公室电话、职务名称、地址、Email、头像等,这需要通过设置一个Button来完成,该项操作实现之后,一般需要返回至之前界面,这时还需要设置一个Button。
底部菜单一般包括查找、增加、退出以及删除等常规操作,事件触发需要通过响应menu键来完成,另外,底部菜单还可以进行是否可见的设置操作,用户可以通过菜单按钮实现联系人手机号码的备份、显示及删除操作。
用户通过点击menu键可以在通讯录联系人信息界面快速完成发信息、打电话以及发送邮件等功能,在软件开发中这些功能可以经过接口套用来实现。
1.4本文结构
文章在初步介绍所开发系统相关研究背景的基础上,对基于Android操作系统手机通讯录软件的研究发展现状进行了简要分析与归纳,并对Android系统的运行特点、原理及主体架构做了较为全面的阐述。
手机通讯录软件主体架构及其设计方案在文章起始部分就做了详细的说明;文字及图片信息的获取是通过Java开源的JAR包实现的;然后,详细介绍了系统中各界面的布局及实现形式;系统数据库模块的配置主要是配合用户完成日常的联系人信息查询、存储以删除操作;优良的UI效果可以使用户获得更好的操作体验,这是基于Android系统自带的相关组件来完成的;最后是针对软件主体功能的改进与优化措施。
第二章Android技术与理论
2.1 Android系统开发简介
2.1.1 Android技术简介
免费性与开放性是Android操作系统能够在竞争激烈的智能手机市场迅速获得大量用户的最主要原因,Android目前主要适用于我们平时使用的平板电脑以及最为广泛使用的智能手机等移动设备,由谷歌和开放手机联盟(open handset alliance)领导开发[1]。为有效提升系统开发效率,Android采用了三层软件栈的结构:顶层主要是面向用户完成各种实际功能,如电话或短信程序;中间层以c++开发的函数库与虚拟机为典型代表;底层开发过程以C语言为主,以系统基本功能的实现为目标。一段时间以来,手机应用软件开发以Java语言编程为主,由于受版权限制,行业发展相对迟缓。在这种情况下,建立开放、标准化的智能设备软件开发平台,将网络运营商、硬件生产商、软件开发商等移动产业链主要节点进行有机结合,已经成为移动行业发展的重要目标,谷歌公司近年来一直致力于相关项目的研发工作[13]。
近年来,智能终端市场对于基于Android操作系统的设备需求量越来越大,带动相应的用户数量呈现出爆炸式增长,从根本上来说,主要得益于Android系统自身强大的扩展性、兼容性以及开放性。对于设备制造商以及系统开发商而言,Android都具有相对独立的开发属性,可以根据自身实际需求对系统功能进行添加或删除。而且,Android系统对于相应手机的兼容能力很强,在应用程序开发过程中,研发人员无需考虑具体的设备型号。在用户体验度方面,快速的网络接入及图形处理能力让Android系统得到了市场的广泛好评[5]。Android操作系统良好的市场发展前景吸引越来越多的手持设备软件开发人员投身的相关领域的研发工作当中[14]。
下面简要介绍构成基于Android系统软件平台的五个主要组成部分:优化了的Linux内核、应用程序框架和组件、Java程序运行环境、关键应用程序、C/C++函数库[15]。
关键应用程序:发展到目前阶段,日历、邮件程序、短信程序以及网页浏览工具等共同组成了Android系统的主体功能架构,随着用户需求的进一步增加,系统主体功能还将继续进行完善与优化。
应用程序框架及组件:Android自带的开发框架中含有多种可用于程序开发的组件,这些组件共同构成了功能强大的组件库,同时该组件库还具有丰富的可扩展性,能由软件开发人员自行进行设计创新,库中新的组件可在后续的应用程序研发中继续被调用。
C/C++函数库:作为Android系统程序开发组件的基本设计单元,C/C++函数库作为系统底层功能的实现模块对于开发者意义重大。其中,标准C函数库、媒体功能库、图形库等构成其主体函数库。
Java程序运行环境:常规的Java程序运行需要占据大量的手机内存资源,Android系统通过采用Dalvik虚拟机与Java核心函数库相结合的方式,大大优化了上述程序的执行过程,提升了手机运行的速度[3]。
Linux内核:在对传统Linux内核不断完善的基础上,Android系统借助其实现了进程及内存管理、设备驱动等服务功能,需要特别说明的是,优化后的Linux内核还成为连接手机硬件与软件的枢纽。
之前已经提到过,Android应用程序开发的重要工具是各种组件(API)[6]。
当前活动程序Activity:该组件在Android应用程序开发过程中最为常见,运行、暂停与停止等状态共同构成了Activity的主体生命周期,上述状态间可借助onCreate()、onStart()、onRestart()、onResume()、onFreeze()、onPause()、onStop()、onDestory()等实现转换;通过调用startActivity(Intent)或startSubActivity(Intent,int)可以激发新的activity,而startSubActivity(Intent,int)的调用过程往往包含onActivityResult(int,int,String,Bundle)的使用。一般情况下,用户与Activity之间是通过建立UI窗口实现通信的。
图像显示View:作为UI构件的基本单元,View主要用于文本、图像内容的显示功能,还具有一定的图像事件处理能力。下面罗列一些常见的View模式:①inflate()(由XML文件生成View)。②onDraw(Canvas)(对View进行填充)。③onMeasure(int,int)(测量View的高度和宽度)。④onLayout()(完成View的布局)。⑤onKeyDown(int,KeyEvent)(View中有按键操作时被调用)。⑥onFocusChanged(boolean,int)(当View得到或失去关注时被调用)。⑦setOnClilckListener()(设置View点击事件监听器)。另外,ListView(显示列表)、EditText(布局文件中的文本编辑)、TextView(布局文件中的文本显示)、Button(按钮)是View下辖的一些子类方法。
事件意图(Intent):意图抽象一个动作,描述你想要做什么。与服务或活动组件联合可以用于启动新的后台服务或组件,在应用程序开发中常用于连接不同的activity组件。从数据结构的角度来看,它对系统的操作行为具有一定的总结功能。它主要由两部分组成:动作和数据。category(Intent类型)和type(数据类型)是其常见的其他属性。常见的Intent模式有getAction()(获取intent动作)、addcategory()(添加intent类型)、intent()(构造intent)、getData()(获取intent数据)等。
内容提供者:应用程序在执行过程中需要通过ContentProvider为其提供访问方式,主要有:查询(Uri,String[],String,String[],字符串,字符串,字符串)(查询的数据信息),插入(Uri,Contentvalues)(添加新数据Contentp提供),updata(Uri Uri,Contentvalues、字符串)String[])(更新数据在Conntp提供),删除(Uri,String,String[])简讯(删除数据)、方法(Uri)(数据类型)。特别要说明的是,访问方式的最终确定是由路径标识符Uri来进行引导的,它是以ContentProvider存储的数据类型存在。
后台服务Service:虽然不与用户发生直接通信过程,却是应用程序得以正常运行的重要组件。StartService()可以用于在上下文环境中启动后台服务,还可以通过上下文与后台服务通信。bindService()。
安卓系统构架由五部分组成,分别是:Linux内核层、系统运行层、库、Android应用框架层和Android应用层,如图2-1所示。
图2-1安卓系统框架

2.1.2关键应用程序
开发人员在发布Android时,会连同一些关键(核心)应用程序一起发布,包括邮件收发、短信收发等客户端程序、网页浏览器、日历、地图等,除这些之外,开发人员还可以设计其它有特色的程序,从而得到使用者的喜爱。这些应用程序都是用Java语言编写形成的。
2.1.3应用程序框架
任何程序的开发都需要使用框架及合适的组件,应用程序框架是开发人员共同使用并需要遵守的。Android平台在自身的框架中增加了组件数量,这些组件可以用来调用应用程序,但开发者在进行程序开发过程中,为方便自己及其他应用程序的使用,会在应用程序框架中放入新打开的组件[11]。
2.1.4函数库
Android自身带有一组能供Android各应用程序组件使用的C/c++函数库,该函数库通过应用程序的不同组件为开发人员提供服务功能。这些函数库涵盖以下几种:Surface Manager(可以实现2D、3D图形的密切融合)、标准C库、浏览器引擎、媒体函数库、用于位图和矢量字体呈现的FreeType和SQLite引擎、基于WEB应用程序的安全协议SSL等[16]。
Java程序在Android上的运行环境涵盖两部分内容,一是Dalvik虚拟机;二是一组用于服务开发人员的Java核心函数库,二者为Java程序的运行提供了有利条件,并对运行过程进行优化处理。任何一个Android应用程序都有自己的运行进程,这种由每个程序独有的运行进程即可称为一个Dalvik虚拟机实例,随着科学技术的不断发展,Dalvik逐渐被优化,在一台设备上能运行虚拟机实例不止一个。在Dalvik优化之后,Dalvik可执行格式属于最小内存依赖格式的范畴,其扩展名为“.dex)”,该格式可以对Dalvik vm的可执行文件进行封装,Dalvik vm离不开位于程序底层的Linux内核,对Linux内核所提供的功能(内存环流、线程)具有依赖性。Java编译器能将一种高级语言通过编码翻译为容易理解或较为直观的语言。
2.1.5 Linux内核
所谓的Linux内核指的是开源电脑操作系统(如Android系统)内核,是由C语言编码形成的,该内核提供的服务包括进程管理、内存管理、应用程序、设备驱动程序等,它将手机的软硬件连成一个共生体,为手机提供屏蔽层,将上层软件及下层硬件进行屏蔽。
2.2 Android应用的构成和工作机制
一般情况下,在Android系统运行下,一个应用程序由四个部分组成:活动(Activity)、意图接收者(Intent Receiver)、和内容提供者(Content Provider)、服务(Service),但这四个部分并不是所有程序都必须拥有。任何一个Android应用程序在使用过程中,都需要与androidmainfest.xml这个配置文件进行参数设置,从而为应用程序的组件、先决条件、组件的功能等下定义。
2.2.1 Activity
作为大部分应用程序四大组分之一,活动(Activity)主要用在表现功能上,属于程序中最基本的构建块之一。纵观Android的应用程序,Activity一般情况下指的是手机屏幕显示窗口的一屏,主要是用来与用户进行交互,因此,其主要功能是为用户提供显示窗口,让用户进行交互,在Android平台使用各程序时,可以针对性的选择自己喜欢的界面,具体的方法是在窗口中采用选择设置界面按钮的方法,从而完成界面选择。
活动(Activity)在对手机屏幕的每一屏进行管理时,管理形式用的是活动栈或堆栈。当我们打开一个新的屏幕时,之前使用的屏幕就会被放至,从而暂停运行。而新屏幕在打开之前总处于活动栈中每一个运行的新屏幕之下,直到用户采用回退方式,将新屏幕的运行停止,才能返回前台。
从上述内容可知,活动的运行属于不断循环的过程,对于未被用户打开的活动被置于活动栈中进行管理,当其中一个被打开时,其就会被置于栈顶成为当前运行活动,以手机屏幕为例,新屏幕在打开之前总处于活动栈中每一个运行的新屏幕之下,直到用户采用回退方式,将新屏幕的运行停止,才能返回前台。
(1)活动的整个生命周期从第一次对onCreate(Bundle)进行调用开始,至最后一次调用onDestroyO为止。前者主要用于所有程序的初始化处理,后者作为清理方法,进行运行内存清理,从而增加空间资源。
(2)可视生命周期:从第一次对onCreate(Bundle)进行调用开始,至最后一次调用onDestroyO为止的时间段内,即使用户不对活动进行操控,程序也能出现在屏幕上。由于所有活动可以进行移除和启动,因此说明这两种调用方法是可以多次使用的,且在调用期间,能对显示给用户的资源进行维护。
(3)后台生命周期:从第一次对onCreate(Bundle)进行调用开始,至最后一次调用onDestroyO为止的时间段内,新屏幕在打开之前总处于活动栈中每一个运行的新屏幕之下,并完成与用户的交互过程,而且所有活动可以在暂停和重启之间切换。这种切换行为是靠意图(Intent)类来实现的,Intent用于对应用程序的操作、操作中包含的数据和其它信息进行描述,然后意图(Intent)类按照Intent的描述,查找对应的组件,并将意图传递给组件完成调用过程。所以,Intent实质上属于组件间通信的媒介,为组件间应该存在怎样的相互调用方式,才能使调用方与被调用方完成解耦给出信息。在应用程序的进行过程中,Intent的使用存在两种形式,分别为直接和间接,前者会指定特定组件,从而找到相应的组件进行各类信息描述。后者是不对组件属性进行指定的意图,需要包含足够的信息,以便系统可以使用这些信息来确定可以满足这个意图的可用组件的类型[7]。
2.2.2 Intent Receiver
作为意图的接收器,Intent Receiver主用用来对外部事件作出回应,只要该接收器被触发,系统就会启动相应程序作出响应,如一旦发生外部事件,Notification Manager就会被调用,从而达到通知用户的目的。再比如,Android系统下,无论用户处于哪个界面,一旦有好友发送消息,就会触发意图接收器,从而将信息推送至界面顶部,通知用户。除此之外,还可以利用上下文将应用程序的意图接收者广播给其他程序从而实现彼此通信,即广播意图。
2.2.3 Service
作为Android系统的另一种组件,Service与活动的级别差不多,但其只能在后台运行,为用户提供具有连续信息的应用程序,当用户在使用应用程序的过程中,如果退出了上一个程序,那被退出的程序就会在Android平台的后台(完成即时通讯系统的研究与实现的平台)运行,直至用户对该程序实施停止指令。基于Android系统的客户端扩展功能的设计与开发,是通过Service实现的。
2.2.4 Content Provider
该组件属于第三方应用数据的访问文库,能将数据通过文件、SQL数据库、以及其他存储设备进行保存。当这些储存数据需要进行使用时,可以调用内容提供程序完成数据读取使用。另外,该组件还可以用于促进存储设备(位于底层)的替换,因此开发人员在进行开发时可以将重点应用逻辑方面,可以不特别注重存储设备的细节,从而为应用程序提供优良数据。
第三章需求分析
3.1功能需求分析
这部分主要结合用户的需求来对程序进行设计,即把用户的需求作为系统逻辑模型,然后对其进行转换,构建可以实施的物理模型,具体操作是:对设计进行细分,分为很多个小单元,然后简化设计方案,解决如何设计的问题。另外,要完成通讯录的创建,必须要事先了解通讯人相关信息并完成添加。通讯录APP共包括四个功能模块,分别为程序启动、各功能模块的相互关系、用户界面、后台服务。其框架图见图3-1:

图3-1各模块关系图
由程序功能模块图可知,该应用程序的核心组件是后台服务,主要完成数据的采集,以及定期根据用户输入的内容,检索相关信息。后台服务的运行可以与AppWidgetProvider同步进行,还可以通过用户在界面调用startService完成启动,后台服务一旦运行,只要用户不对其实施停止指令,将一直维持启动状态。在后台程序运行过程中,用户界面可以通过数据库获得文本信息。这有两个优点:①如果网络通信失败,也不会导致接口丢失。②能使后台服务及时对数据进行更新,从而使数据具有准确性。对于SQLite数据库中的全部操作方法,数据库适配器都拥有并可以使用,这些方法可以帮助用户界面以及后台服务完成数据库的相关操作。编程阶段完成的标志包括:用户界面设计的完成、以及模块设计、数据库设计完成。
用户在对文本编辑器进行操作时,要完成各界面的切换操作,可以点击菜单(menu)按钮完成,功能切换的具体内容见图3-2:

图3-2不同功能界面切换
3.2性能需求分析
为增加更多的用户,设计开发的手机APP应该以为用户提供良好体验为宗旨,主要通过以下几方面实现:
(1)友好的界面设计
各应用程序的界面设计应该以“简单、设计合理、直观、便于操作、给用户带来舒适感、有较好的UI视觉效果”等为主,从而给用户带来良好的体验。
(2)响应速度快
在程序使用过程中,如果响应速度慢会增加用户的不耐烦情绪,因此在设计时要提高响应速度,使用户输入或请求得到快速处理,对那些确实需要很长时间才能启用或响应的程序,可以预先提示用户,让其有心理准备,不用一直等着程序的响应。
(3)无缝性
最普遍的无缝性问题就是指程序的后台运行进程,比如broadcast receiver或service,为响应某个事件而弹出的对话框,虽然这种行为对用户在模拟器上独立建立并完成系统测试并没有太大影响,但是,当应用程序被安装到具体设备上,然后后台线程对对话框进行显示时,我的应用可能没有得到用户关注,从而出现我的应用显示对话框时是位于运行程序的后台,或因获得用户焦点完成对话框的显示等情况,然而,无论用户当时运行的程序是什么,这种后台运行进程为响应某个事件而弹出的对话框的行为可能对用户或我的应用可能没有作用。因此,为避免出现以上问题,我的应用应该采取主动应对措施,如调用Notification类通知用户,这种行为会在用户界面的状态条推送一个图标,从而体醒用户,而不是获得用户焦点或打断用户对其它程序的使用。
3.3数据库需求分析
进行需求分析表明,数据组织的整体形式以及文件的设计要根据用途的不同需求来进行设计,数据库即储存数据的组件,对数据库的要求主要包括以下几方面:①所存储的数据以相应的格式存于数据库,数据库被设置于计算机存储设备中;②在进行描述、储存、组织时,数据要有特定模型,具有可重复性低、数据独立性强、易扩展性强、可被一定区域内的用户进行数据共享等特点。另外,在开发数据库时,开发人员应该结合需要解决问题的规模和特性、使用的前端程序创造工具、以及以SQLite为构建基础等,选择合适的数据库类型,从而完成数据库的设计。
作为具有轻量特性的数据库,SQLite符合acid的关系数据库,是一种管理系统。其占用的资源量很少,具有嵌入式的设计目标,并已经投入多种嵌入式产品进行运用。它具有以下几种优点:①支持的比较成熟的操作系统包括Unix、Windows、以及Linux等;②能综合诸如Java、Tcl、以及PHP等多种程序语言,还存在ODBC接口;③与android有着相同的性能优势,与世界开源电脑中,比较成熟的Mysql及PostgreSQL数据库管理系统相比,其处理速度相对较快。
进行数据存储,并完成系统数据库的构建,体现了Android平台上Java语言的功能,通过编辑代码,由数字式电压表编译,没有辅助工具,因为SQLite轻量数据库有可视化特性,通过Java进行代码编辑,实现这些可视化操作,从而完成其不使用先进的编程,数据库查询功能是相对麻烦关节有机整体结构如何实现客户端数据库,实现过程超出地平线,没有艾滋病病例数据库,整个运行过程很难理解透彻。
3.4安全需求
该种需求主要针对用户隐私、用户访问的网络页面、以及维持设备运行等,这些管理不好就会侵犯用户的隐私,因此,Android安全中比较重要的设计指的是对程序设置访问权限,避免其它程序在默认情况下向其他程序、用户或操作系统实施有害操作,因此应用程序都有设置权限,属于较为安全的黑盒子,只要不提供权限就不会影响其他程序的使用,而且能有效保护用户的隐私。
第四章功能设计
4.1总体设计
对于一个程序而言,在规定时间内满足设计者的最终目的,其必要功能以设计者的高标准顺利完成,这些都离不开一个优秀的系统设计步骤,这是必要条件。一个以高标准为前提的设计步骤,对于程序的早期调整测试,乃至后期的补充改良等都发挥着很大的作用,能够使得程序在性状上更加的实用和完善。一个开发流程的制定是需要对用户需求、系统模块、通讯录功能等多方面进行完整的分析才能最终完善的呈现出来,具体流程如下:

图4-1开发流程图
对于系统的备份、查找、通讯、联系人增删改、用户管理等功能的确认是需要一个标准的开发流程来进行的。
对于设计后的一个系统,在对其功能结构进行相关分析后,其具体的运行流程为:先是系统运行起来,然后用户便进入到展现得有联系人列表的一个通讯录主界面。其中有一个MENU界面,里面有增加、查找、删除、备份等功能,增加功能即可以对没有的联系人进行新增,查找功能即为可以在已有联系人中找出特定的联系人及其相关信息,删除功能即为可以对单个、多个或者全部联系人进行删除处理,备份功能即为可以对SD卡进行备份。对于具体的联系人详细界面中,可以通过对MENU键进行点击,之后便会出现通讯功能,通过该功能就可以对所选联系人进行邮件发送、信息发送、拔打电话等功能。具体的运行流程如下:

图4-2系统运行流程
4.2系统功能设计
通过对手机功能进行相关调查,最终得到对手机通讯录功能进行使用的用户约为10%左右,对于手机通讯录功能以及地址簿应该进行更加科学合理的创新和完善,其具体功能不能只如电话本一样仅仅只需要对电话号码进行记录,还需要更加符合用户的独特需求,跟上社会进步的步伐。地址簿的发展已有十多年的历史,从最开始的英文模式到如今我们中文的展示,未来还有很大的发展空间,卡夹形式或许是接下来的发展模式,也就是说在每一个联系人下都对其手机号、固定电话、单位、居住点、邮箱、用户自己的相关备注等有详细的记录。如此一来,对于用户而言,该地址簿所能发挥的交互和服务作用便更加完善了。地址簿需要满足用户的需求,使用户体验感佳,操作简捷,对于用户的具体操作能够及时转换为对应的命令,为用户提供每一个需要的服务。具体功能如下:
1、增加、删除、编辑联系人
在通讯录界面,可以看到一个增加按钮,点击即可进入到增加联系人界面。在该界面中便可以进行联系人新增的具体操作,不仅可以进行基本信息的录入,还可以根据用户自身的需求录入诸如备注、姓名、头像、手机号码、办公室或者家庭或者其他联系方式、单位、职务职称、地址、邮编、邮箱等个性化的信息,确认后即可。删除功能可以对单个、多个或者全部联系人进行删除,单个的操作是选择要删除的一个联系人,即可进入到编辑界面,此时便可以对其资料进行修改或者直接删除该联系人,之后返回主界面即可。多个具体为在列表中对所要删除的多个联系人进行标记处理,然后点击MENU按钮,之后便有删除按钮出现,点击即可。全部删除就是在菜单中直接就有一个删除全部联系人功能,直接点击即可。需要注意的是,在对联系人进行删除的操作中,系统会弹出是否继续操作的提示信息,选择否的话就是不对联系人进行删除处理,而是继续保存在通讯录中。
2、查找联系人
在菜单底部,有一个盒子,点击进去就是联系人列表,该列表中展示的是联系人的姓名、电话等信息,界面中有一个搜索按钮,点击后输入用户所查找的基本信息,之后便会显示所有与输入信息相关的联系人列表,用户就可以在其中找到自己需要的联系人,点击即可查看该联系人的相关信息,便可以进行其他需要进行的具体操作。查找之后,若想返回到主界面直接点击return按键即可。
3、通讯功能
进入通讯录,选择联系人后,在具体的联系人详细界面中,可以通过对MENU键进行点击,之后便会出现通讯功能,通过该功能就可以对所选联系人进行邮件发送、信息发送、拔打电话等功能。
4、菜单功能
点击menu按键,底部菜单框就会出现,其中便可以选择返回、菜单、删除、查找、增加等,选择菜单后就可以进行备份SD卡、删除所有、显示所有等具体操作。
4.3系统数据库设计
对于这个程序的数据库,其建立平台为安卓平台,通过Java代码的执行、DVM的编译完成。之所以选择Java代码的执行来操作数据库,就是因为整个SQLite数据库的操作都是非可视化操作。在表的设计上,对表进行了更加优化的处理,使表与表之间的关系简单化,是一种不会互相约束的独立关系,最终使得这种关系同样反映在数据库上。
对于文本管理功能的实现,则要对文本信息表database进行建立,且表中必须有imageid,remark,company,emial,address,familyphone,officephone,mobilephone,name,id这些属性在,具体为:
表4-1文本信息表database
属性 | 数据种类 | 解释说明 |
Name | Integer | 姓名 |
_id | Integer | 自动增加的主键 |
Mobilephone | String[ ] | 手机号 |
Familyphone | String[ ] | 家庭号码 |
Officephone | String[ ] | 办公室号 |
Company | String | 公司地址 |
String | 邮箱 | |
Address | String | 地址 |
Imageid | Integer | 图片号 |
Remark | Integer | 标记 |
第五章通讯录实现
5.1 Android开发平台搭建
采用Java语言,并且以Dalvik虚拟机作为基础实现开发Android上层应用程序,因此当今最流行的Java实现继承开发环境Eclipse是Google公司最为推崇的一种方法。由于采用的是Java语言,仅有Eclipse是远远不够的,在这里还需要Java SDK(其中包括JRE:Java Runtime Environment),此为SUN公司所开发。除此,Java开发与Android应用程序的开发截然不同,区别较大,因此需要Android SDK(谷歌提供),也要讲ADT安装在Eclipse上,之后实现了更改和升级Android开发提供开发工具,此时的工具的作用主要是实现升级Eclipse开发工具。
总之,构建Android开发环境需要以下软件进行支撑,进而实现了开发Android应用程序:
(1)Android SDK
(2)Java SDK
(3)ADT
(4)Eclipse
如下步骤为搭建Android开发平台:
(1)第一步下载工序如下:打开http://www.eclipse.org/downloads/这个网站,然后在这个网站里面下载Eclipse集成开发环境(推荐版本Java EE集成),将下载之后的文件进行解压。下载SDK的网站是http://java.sun.com/javase/downloads/index.jsp,将下载之后的软件进行安装,然后打开http://dl.google.com/android/android-sdk-windows-1.5_r1.zip网址继续下载Android SDK1.5压缩文件,将打开之后进行解压。
(2)解压Eclipse之后,解压文件夹里面有一个eclipse.exe的文件,然后双击进行软件的安装,之后会弹出安装菜单,先点Help->Install New Software->Available Software,之后再对右侧的“Add”地方进行单击,然后再输入http://dl-ssl.google.com/android/eclipse/网址到里面再点确定,接着在“Work with”的位置对菜单进行下拉,就有有上面输入的网址出现,然后再点击这个网址。稍后就会有Developer Tools选项出现,对这个选项进行勾选,然后点Next,之后这个软件就会自动的在网上寻找Android开发工具插件来下载,最后转到Android Development Tools和Android DDMS,对这两个选项进行选择,之后再点Finish,因此Eclipse就会实现了Android插件的自动下载和安装,再对Eclipse重新启动就可以了。
(3)重新启动软件之间,再将解压之后的Android SDK目录添加到软件菜单中的Windows->Preferences->Android->SDK Location中,之后点Apply。
(4)将解压之后得到的文件夹,寻找Android SDK目录下的tools文件夹,在Windows XP的系统变量中将此文件夹内的一个值添加到的path变量。
5.2具体功能实现
5.2.1注册首页

5.2.2界面布局
在/res的子目录中保存了Android的资源文件。其中XML格式的数据文件保存的文件夹地址是在/res/xml目录中,用来自定义颜色和字符串的文件保存的文件夹地址是/res/values目录,图像文件保存的地址是在/res/drawable/目录中。这些被调用的资源在所有的程序开发阶段都可以保存在以上目录当中,要考虑手机屏幕的大小以及具体的尺寸,进而使得软件界面兼容不同尺寸的手机,这是绘制界面之前必须要考虑的因素。如下代码可实现增加界面绘制:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"//宽度为填充
android:layout_height="fill_parent"//高度为填充
android:orientation="vertical">//方向为垂直
<ScrollView android:layout_weight="4"//比重4:1
android:id=" +id/ScrollView1"
android:layout_width="fill_parent"//宽度充满父空间
android:layout_height="wrap_content"//根据内容决定高度
android:scrollbars="vertical">//滚动条方向为垂直
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id=" +id/widget205"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"//左边距为10dp
android:layout_marginRight="10dp">
<ImageButton
android:id=" +id/image_button"
android:layout_width="60px"
android:layout_height="60px"
android:src=" drawable/icon"//默认图片
android:scaleType="centerCrop"//按比例缩放图片,保持图片的尺寸比例
></ImageButton>
<EditText
android:id=" +id/username"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:hint="姓名"//hint当文本内容为空时,出现的提示信息
android:gravity="top"//置顶垂直排列
android:layout_gravity="center_vertical"//排列居中/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp">
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="手机:"
android:textSize="20dp"/>
<EditText
android:id=" +id/mobilephone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:gravity="top"android:hint="手机"
android:phoneNumber="true"/>//只能输入数字
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp">
<Button
android:id=" +id/save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="保存"/>
<Button
android:id=" +id/btn_return"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="返回"/>
</LinearLayout>
</LinearLayout>
5.2.3增加联系人功能
添加联系人的操作在通讯录中最核心的功能,也是最主要的,保存联系人信息的方式是通过在联系人的界面点击保存的按键进行保存。首先将user函数定义在user类中,此时的数据从表单中取得,对数据库的帮助类进行建立,之后再把user保存到数据库中,打开数据库,如下图5-1位增加界面。
btn_save.setOnClickListener(new OnClickListener(){
public void onClick(View v){//判断姓名是否为空
String name=et_name.getText().toString();//将et_name读取的文本转化为字符串
if(name.trim().equals("")){//如果读取的字符串为空
Toast.makeText(AddNew.this,"姓名不能为空",Toast.LENGTH_LONG).show();
return;}
//从表单上获取数据
User user=new User();//在user类中定义了一个user函数
user.username=name;
user.address=et_address.getText().toString();
user.company=et_company.getText().toString();
user.email=et_email.getText().toString();
user.familyPhone=et_familyPhone.getText().toString();
user.mobilePhone=et_mobilePhone.getText().toString();
user.officePhone=et_officePhone.getText().toString();
user.otherContact=et_otherContact.getText().toString();
user.position=et_position.getText().toString();
user.remark=et_remark.getText().toString();
user.zipCode=et_zipCode.getText().toString();
//判断头像是否改变,若改变,则用当前的位置,若没有改变,则用前一回的位置
if(imageChanged){
user.imageId=images[currentImagePosition%images.length];}else{
user.imageId=images[previousImagePosition%images.length];}
//创建数据库帮助类
DBHelper helper=new DBHelper(AddNew.this);
//打开数据库
helper.openDatabase();
//把user存储到数据库里
long result=helper.insert(user);
//通过结果来判断是否插入成功,若为-1,则表示插入数据失败
if(result==-1){
Toast.makeText(AddNew.this,"添加失败",Toast.LENGTH_LONG);}
setTitle("用户添加成功!");
setResult(3);//返回到上一个Activity,也就是Main.activity
finish();//销毁当前视图}});
图5-1增加联系人界面

5.2.4通信功能
发短信、发邮件以及用户打电话的功能结合于以下程序,基于以上功能可通过Android操作系统自定义接采用如下代码来实现,只有运用这些接口才可以。
首先对menu键进行定义,之后将三个选项加入到menu中,然后将图标功能设置到每个item中,如图5-4为具体的通讯功能。

图5-2通信功能界面
Menu键构建好了之后就可以将三个事件添加到每个MenuItem中,如下为功能代码:
public boolean onMenuItemSelected(int featureId,MenuItem item){
//设置menu键选择功能
switch(item.getItemId()){通过switch选择不同的id
case Menu.FIRST:{
//将状态设置为打电话
status=Intent.ACTION_CALL;
if(callData==null){//加载可用的号码
loadAvailableCallData();//加载电话号码
}if(callData.length==0){//提示没有可用的号码
Toast.makeText(this,"没有可用的号码!",Toast.LENGTH_LONG).show();
}else if(callData.length==1){
//如果之有一个可用的号码,这直接使用这个号码拨出
Intent intent=new Intent(Intent.ACTION_CALL,Uri.parse("tel://"+callData[0]));
//设置一个新的intent对象
startActivity(intent);//开始活动事件
}else{
//如果有2个或者2个以上号码,弹出号码选择对话框
initNumChooseDialog();//选择号码
}break;//跳出
}
case Menu.FIRST+1:{
status=Intent.ACTION_SENDTO;//将状态设置为发短信
if(callData==null){//如果号码为空
loadAvailableCallData();//载入号码
}if(callData.length==0){//提示没有可用的号码
Toast.makeText(this,"没有可用的号码!",Toast.LENGTH_LONG).show();
}else if(callData.length==1){
//如果之后又一个可用的号码,这直接使用这个号码拨出
Intent intent=new Intent(Intent.ACTION_SENDTO,Uri.parse("smsto://"+callData[0]));//设置一个新的intent对象
startActivity(intent);//开始活动事件
}else{
initNumChooseDialog();}//初始化号码
break;}
case Menu.FIRST+2:{
if(user.email.equals("")){
Toast.makeText(this,"没有可用的邮箱!",Toast.LENGTH_LONG).show();
}else{
Uri emailUri=Uri.parse("mailto:"+user.email);//设置uri为发送邮件的uri
Intent intent=new Intent(Intent.ACTION_SENDTO,emailUri);
//设置一个新的intent对象
startActivity(intent);//开始活动
}break;//退出}}
//返回menu选择功能}
第六章系统测试
6.1系统测试用例
采用测试工具根据一定的流程和测试方案实现对产品的性能和功能进行测试,此时为系统测试,依照不同的条件进行不同测试工具的编写,维护测试系统和设计测试系统,进而分析测试系统时所出现的一些问题。如下表6-1是很久性能和功能需求所制定的测试方案。
表6-1测试用例
ID | 用例描述 | 操作步骤 | 预期结果 | 实际结果 |
1 | 查找联系人功能 | 1、对相关联系人的信息进行输入查找 | 查找出来的联系人符合输入条件 | 符合预期 |
2 | 删除联系人功能 |
1、删除联系人详细信息界面 2、标记联系人 3、点击底部菜单删除键进行删除 4、删除全部联系人 |
成功删除联系人详细的信息 |
符合预期 |
3 | 增加联系人功能 |
1、对联系人的头像进行选择 2、将联系人相关信息输入其中 3、跳转到联系人列表界面 |
从而增加联系人 | 符合预期 |
4 | 通讯功能 |
1、在联系人详细界面上对menu按键进行电极,之后通讯功能的界面将会弹出来 2、识别邮箱和号码进行操作 |
达到联系人发邮件、短信以及打电话的功能 | 符合预期 |
5 | 菜单功能 |
1、功能的全部显示 2、对SD卡进行备份 3、全部删除 |
联系人全部显示,将数据保存到SD中,之后全部删除 | 符合预期 |
6 | 通讯录底部菜单功能 |
1、联系人的增加 2、联系人的查找 3、联系人的删除 4、菜单 5、退出 |
实现功能键 | 符合预期 |
6.2系统测试结果
6.2.1系统测试方法
通过4个步骤进行测试,有测试及发版测试、集成测试、单元测试以及确认测试。
单元测试,针对每个程序单元集中采用源代码进行测试,对各个程序的模块检查是否实现要求的功能。
集成测试就是组装这些已经测试的模块,然后测试一些与设计相关的软件体系结构的构造。
确认测试,对已开发的软件进行检查测试,确认软件是否是正确的进行配置以及检查能否达到规格需求条件。
系统测试,将这些软件确认之后,再与其他的系统进行组合再测试,测试过程是在实际运行环境中进行测试。
6.2.2编辑联系人功能测试
返回、删除以及修改按键存在联系人详细的界面上,当点击修改按键时,此时所有联系人的信息都是出于可编辑状态,通过EditView设置只可以对固定电话和手机号码进行数字的输入,完成修改之后就可以点完成,确定按键触发之后点监听事件,进而对联系人信息在数据库中进行修改,之后系统会自动回到联系人的浏览界面。使用联系人列表时,点击任意一个联系人可详细的查看联系人,具有信息有职务职称、办公室电话、联系人手机号码以及家庭电话等信息,若是信功能键同时出现在联系人的详细界面上时,这个时候是不能操作联系人的信息,若是想继续修改联系人信息的话,点击修改的按键就可以进行信息修改。在联系人的编辑界面上进行测试,具体如下图6-1。
图6-1编辑联系人界面

6.3测试总结
多次对这个系统进行测试,测试结果表明系统能够正确的实现发邮件、发信息、显示所有、修改、查找、删除和增加、备份、删除所有联系人以及打电话等操作,基于以上通讯录的功能完全满足用户的日常需求。程序运行中通过测试的过程完善程序的细节漏洞,进而改善程序的运行效果,从而满足系统程序运行的基本条件。针对这个系统构思仍然有不足的地方,这些可通过以后的发现慢慢的解决完善。为了更好的给客户带来使用体验和便捷,可进一步扩展这个软件。
第七章结论
通过学习Android实现开发系统,这个开发过程相当的艰难,只有通过耗费大量的时间去学习才能够在短时间内完成系统的开发,学习过程需要通过查阅相关书籍、检索相关文献,然后进行整理和总结,以此才能够实现在短时间内掌握Android技术,进而实现各种软件的开发。本文的研究对象为Android平台的架构以及基于Android平台开发手机通讯录功能。
本文在进行开发之前整理学习了很多的资料,但是由于个人能力方面并不能很快的解决和实现程序的开发,进而有如下几点进行总结:
(1)本文主要是基于Android平台开发通讯录程序,但是并没有对Android技术进行真正的掌握,设计的系统界面仍然存在不足,只有通过更深入的研究Android平台,才能够完善和加快系统程序的开发。
(2)到目前为止仅能在模拟器中安装运行本文开发的程序,针对于在真机上研究还有待进一步考究。通过不断的完善和研究Android技术,基于手机通讯录类程序软件才能得到广泛的使用,进而解决现状面临的问题。
开发这个系统对我而言具有很大难度,以前我从没有了解过这方面的知识,我只有不断的学习才能够实现程序中的基本功能,保证软件的正确运行。通过这次毕业设计,我学到了很多东西,这对我未来的工作和学习上带来很大的影响。
参考文献
[1]靳岩,姚尚朗.Google Android开发入门与实战[M].北京:人民邮电出版社,2019:1-12.
[2]景保玉.2010中国移动应用开发现状与趋势大调查[M].北京:人民邮电出版社,2019:2-19.
[3](英)Herbert Schildt.Java参考大全[M].北京:清华大学出版社,2018:9-11.
[4](美)鲍格斯坦(Bergsten,H.)著,林琪,朱涛江译.JSP设计(第三版)[M].北京:中国电力出版社,2018:12-28.
[5]高昂.支持动态语言的Android平台[M].北京:人民邮电出版社,2019:5-7.
[6]郭志宏.Android应用开发详解[M].北京:电子工业出版社,2018:6-21.
[7]韩超,梁泉.Android系统开发原理及开发要点详解[M].北京:电子工业出版社,2018:1-11.
[8]李宁.Android/OPhone开发完全讲义[M/CD].北京:水利水电出版社,2018:6-19.
[9]余志龙.Google Android SDK开发范例大全(第2版)[M].北京:人民邮电出版社,2019:6-6.
[10]公磊,周聪.Android的移动应用终端应用程序开发与研究[J].南昌:计算机与现代化,2018:8:85-89.
[11]高焕堂.Android应用框架原理与程式设计36技[M].Google公司,2018:2-22.
[12](英)梅尔.Android 2高级编程(第2版)[M].北京:清华大学出版社,2017:12-12.
[13]李刚.疯狂Android讲义[M].北京:电子工业出版社,2011:6-11.
[14]Mehran Sahami.Programming Methodology[M].Apress:the Expert’s Voice,2018:4-12.
[15]Julie Zelenski.Programming Abstractions[M].Apress:the Expert’s Voice,2019:3-16.
[16]Haseman Chris.Android Essentials[M].Apress:the Expert’s Voice,2019:8-22.
[17]DiMarzia Jerome.A Programmer’s Guide[M].McGraw-Hill:the Expert’s Voice,2018:4-11.
[18]王向辉,张国印,沈洁.Android应用程序开发[M].北京:清华大学出版社,2018:3-3.
[19]张孝祥.java就业培训教程[M].北京:清华大学出版社,2017:7-22.
[20]E2ECloud工作室.深入浅出Google Android[M].北京:人民邮电出版社,2019:8-11.
下载提示:
1、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“文章版权申述”(推荐),也可以打举报电话:18735597641(电话支持时间:9:00-18:30)。
2、网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
3、本站所有内容均由合作方或网友投稿,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务。
原创文章,作者:写文章小能手,如若转载,请注明出处:https://www.447766.cn/chachong/15019.html,