《基于安卓Android的通讯录设计及实现毕业论文.doc》由会员分享,可在线阅读,更多相关《基于安卓Android的通讯录设计及实现毕业论文.doc(48页珍藏版)》请在三一办公上搜索。
1、本科生毕业论文(设计)题 目: 基于Android的通讯录设计与实现 姓 名: 学 院: 理学院 专 业: 网络工程 班 级: 2009级1班 学 号: 1887090106 指导教师: 赵 靖 职称: 讲 师 2013年5月28日科技学院教务处制目 录摘要11.绪论11.1研究背景11.2主要工作22ANDROID系统开发简介22.1 Android技术简介22.2Android应用程序框架33软件需求分析33.1软件功能需求分析33.2软件数据库需求分析43.3安全需求分析44.功能设计44.1总体功能设计44.2系统功能设计54.3系统数据库设计65.通讯录的实现65.1Android开
2、发平台搭建65.2具体功能的实现75.2.1密码设置及密码验证75.2.2主显示界面95.2.3删除联系人功能95.2.4Menu功能95.2.5MENU的菜单功能135.2.6通讯功能136系统测试146.1系统测试实例146.2系统测试结果156.2.1系统测试方法156.2.2密码设置/验证功能测试156.2.3 对联系人的编辑、查找及删除功能测试166.2.4 备份数据功能测试166.2.5 通讯功能测试176.3系统测试总结17结束语17致谢17参考文献18ABSTRACT19基于Android的通讯录设计与实现网络工程专业学生 指导老师 赵 靖摘要:智能手机终端能够支持用户添加更多
3、内容丰富的应用功能,从而赢得了绝大部分手机用户的青睐、占据了手机市场的最大比例。手机通讯录作为手机最基础最常用的软件也随着手机科技的飞速发展变得强大起来,由于Android的开源性、智能性等优势,基于Android的通讯录也开始风靡世界。本文设计实现的通讯录迎合市场的需求,充分运用了免费的Android开发平台,通过需求分析确定开发功能,以eclipse为开发环境,搭建Android平台,再进行代码编写、程序调试,在实现通讯录基本功能浏览、添加、修改、删除、标记、发短信、打电话、发邮件等的基础上,添加了通讯录加密、添加图像、更改头像等功能,并优化了查找功能,使通讯录功能更友善。关键词: 智能手
4、机,Android,通讯录,eclipse1.绪论1.1研究背景智能手机(Smartphone),是指“像个人电脑一样,具有独立的操作系统,可以由用户自行安装软件、游戏等第三方服务商提供的程序,通过此类程序来不断对手机的功能进行扩充,并可以通过移动通讯网络来实现无线网络接入的这样一类手机的总称”。“智能手机(Smartphone)” 这个说法主要是针对“功能手机(Feature phone)”而来的,本身并不意味着这个手机有多“智能(Smart)”;可以说“智能手机(Smart Phone)”就是一台可以随意安装和卸载应用软件的手机(就像电脑那样)。智能手机的诞生,是掌上电脑(PocketPC
5、)演变而来的。厂商为了满足市场需求,把电脑的系统移植到手机中,将手机和掌上电脑综合于一体,于是才出现了智能手机的概念。智能手机具有五大特点:(1)具备了无线接入互联网的能力,即要有GSM的支持网络下的GPRS或者是CDMA网络支持下的CDMA 1X或3G网络。(2)人性化,可以根据个人需要扩展机器的功能。(3)它是具有开放性的操作系统,还可以安装非常多的应用程序,使得智能手机的功能可以得到无限的扩展。(4)具有PDA功能,其中包括个人信息管理、日程记事、任务安排、多媒体应用、浏览网页等。(5)扩展性能强,第三方软件支持多1。Android本意词是指“机器人”, 同时也是Goole于2007年1
6、1月5日宣布的基于Linux平台的开源手机操作系统的名称,Android是一种基于Linux的自由及开放源代码的操作系统,Android以其自由开放源代码的特点而成为最热门的智能手机。在这个信息化的时代,手机已成为继固话之后最为通俗的交流工具2,“通讯”成了生活的必需品,这就有了系统下人与人之间的多样联系方式手机通讯录。传统通讯录以纸张为载体,将需要记录的联系人一一人登记在册,包括地址、联系方式等,再在需要时进行翻阅查询。手机通讯录,在手机系统下,占用手机相对很小的空间,系统的记录联系人的联系方式及其他信息,不仅突破了各种条件的舒服,减轻了机主的负担,更方便了使用者的通讯。综上所述,手机通讯录
7、管理系统是一个高效、实时、绿色环保的管理系统。然而现在很多通讯录外观花哨、功能单一或形同虚设。本文针对以上各种弊端,通过需求分析及调查等工作开发了此种通讯录,将各种性能优化,继承通讯录的常用功能,满足一般用户存储,查找,删除,查看的需求,此外还支持发信息,打电话,发邮件,备份SD卡等功能3。1.2主要工作在此背景下,基于Android手机通讯录的设计及实现具有非常重要的意义,可以根据市场需求情况开发一款实用的手机通讯录。本系统的设计工作遵循标准的软件设计流程,首先通过市场调查进行需求分析,然后进行软件功能的设计,进而搭建Android开发环境进行代码编写、调试程序,实现软件设计功能,再次,进行
8、软件功能测试,对软件功能的不足及可优化的地方进行记录,最后进行软件系统的优化。2Android系统开发简介2.1 Android技术简介Google与2005年并购了成立22个月的高科技企业Android,展开了短信、手机检索、定位灯的业务,同时基于Linux的Android平台也进入了开发阶段。Google在2007年11月5日发不了Android的第一个版本,在刚发布之初,Android并没有引起界内太多的关注。但随着Google组件的开放手机联盟不断有新生力量的加入,Android这个初出茅庐的小子已成为为iPhone分庭抗礼的生力军4。Android采用软件堆层(Software St
9、ack,又名软件叠层)的架构,主要分为三部分。底层以Linux内核工作为基础,由C语言开发,只提供基本功能;中间层包括函数库Library和虚拟机Virtual Machine,由C+开发。最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自行开发,以Java作为编写程序的一部分,不存在任何以往阻碍移动产业创新的专有权障碍 5 。Android平台支援各种先进的网络、绘图、3D 处理能力,可以用来提供更好的使用者体验,任何人都可能根据自己的喜好将手机系统中的所有功能重新编写 6。图 1 Android的架构在Android操作系统中,将体系结构划分为4层:应用层(Applica
10、tion)、应用框架层(Application Framework)、系统运行库层(Libraries)以及Linux内核层(Linux Kernel)7,如图1所示。应用层(Application):运行层是使用Java语言进行开发的一些应用层序,如地图软件、邮件客户端层序、浏览器的连接等都是运行在应用层上。应用框架层(Application Framework):应用层序框架,主要是Google公司发布的一些操作支持的类库(API框架)。应用程序中包含众多组件,开发者也开放新的组件,将组件放入应用程序框架中,可以进行供自己和其它应用程序调用。系统运行库层(Libraries):当使用And
11、roid框架进行开发时,为了更好地为程序服务,Android操作系统会自动调用一些C/C+的库文件夹来支持所使用的各个组件。Linux内核层(Linux Kernel):Android操作系统主要是基于Linux2.6内核,程序的安全性、驱动程序、进程管理等都由Linux内核所提供。 2.2Android应用程序框架基于Android软件开发接触到最多的部分就是应用程序框架,开发者都是通过应用程序框架来与Android地层进行交互。整个应用程序框架中有4个重要组件:Activities、Intent、Services和Content Provider。Activities:一个Activiti
12、es表示一个程序的显示界面,一个应用程序课包含多个Activities组件,每个Activities组件都有各自的周期。Intent:Intent用来完成多个程序之间的跳转,另外还可以用Intent来调用Android本身所提供的应用程序,例如打电话、发短信、发邮件等。Services:Services也是Activities程序,只是Services运行在后台,并没有界面显示。Content Provider:不同应用程序之间需要对数据进行共享时用到此组件。3软件需求分析3.1软件功能需求分析通过对用户需求的市场调查的分析,确定反应用户需求的系统逻辑模型,把整个设计划分成4个单元,分别是程序
13、启动、用户界面、后台服务和数据库适配器,各模块之间的关系如图2所示:图 2系统逻辑模型在上图中,后台服务是整个软件的核心,数据获取模块是其主要部分,负责周期性的从用户输入的内容中获取信息。后台服务在程序启动时就由AppWidgetProvider启动,也可由用户界面通过startService()进行启动,启动后的后台服务将一直保持运行状态。同时用户界面从数据库中获取文本信息。一方面可以避免因网络通信不畅造成界面失去响应;另一方面,后台服务可以及时更新数据,以保证数据的准确性。数据库适配器封装了所有对SQLite数据库操作的方法,用户界面和后台服务会调用它来实现数据库操作。在完成用户界面设计、
14、数据库设计和模块设计后,至此程序设计阶段基本完成。3.2软件数据库需求分析数据库存储数据的组织形式和数据库文件的形式不定,主要根据使用要求来确定,但数据中的数据都是按照一定模型组织、描述和存储的,具有较小的重复度、较高的数据独立性和易扩展性。用户数据库是基于SQLite建立。SQLite是遵守ACID的关系型数据库管理系统,包含在一个相对小的C库中,能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如PHP、Java、C、C#等。SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直
15、接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。SQLite是无类型的,这意味着我们可以保存任何类型的数据到所想保存的任何表的任何列中。SQLite数据库的非可视化操作是其弊端所在,这就导致SQLite在实现客户端数据整体结构的过程无可视界面,整个过程都很抽象。3.3安全需求分析由于Android系统自身具备的开放源码的特征,它的安全性能成为信息安全领域研究的一个重要课题。Android的安全性能主要体现在两个方面:Android的系统安全和数据安全。Android系统安全是指智能终端本身的安全,是对操
16、作系统的保护,防止未授权的访问及对授权用户服务的拒绝或对未授权用户服务的允许,包括行为检测、记录等措施。Android的数据安全指确保存储数据完整性、合法性二个方面,要求做到系统正确地传输数据,授权程序顺利地读取数据8。Android安全中的一个重要的设计点是在默认的情况下应用没有权限执行对其他应用程序、操作系统或用户的有害操作,这些操作包括读取用户的隐私数据,访问网络,保持设备活动等等,应用程序的进程是一个安全的黑盒子,在没有给它权限的时候它不能干扰其他应用程序。4.功能设计4.1总体功能设计通过对通讯录功能、系统模块、用户需求方面进行全方位的分析制定开发流程,开发流程如图3所示。图 3 软
17、件开发流程4.2系统功能设计采用标准的开发流程确定系统具有用户管理功能,联系人增删改功能,通讯功能,查找功能,备份等功能。系统的功能图如4所示。图 4 开发流程图通过对系统的功能结构的分析,设计后系统运行流程是首次使用将进入密码设置界面,此后每次进入此程序将首先进入密码验证界面,密码正确才进入通讯录主界面,可以看到联系人列表,长按联系人实现标记功能,点击联系人进入联系人详细信息显示界面,在此可以实现修改、删除该联系人信息及返回功能,此外通过MENU课选择打电话、发短信、发邮件通信功能。在通信录主显示界面通过点击MENU课选择增加联系人、删除联系人、查找联系人、菜单及退出菜单,另外“菜单”选项又
18、包括子菜单:显示所有,删除所有,备份,刷新,修改密码,后退等。系统的运行流程图如图5所示。图 5 运行流程图4.3系统数据库设计该程序数据库是在Android平台上执行Java代码,通过DVM编译来建立的,由于整个SQLite数据库是非可视化操作,因此所有对数据库的操作都是通过执行Java代码实现。且表的设计也尽量优化,没有错综复杂的关系,每张表都是独立的,不存在任何约束,因此数据库也是独立数据库。本系统为了实现文本管理功能,需要建立文本信息表user,文本信息表user中需要包含的属性有_id,username,username_py,mobilephone,officephone,fami
19、lyphone,position,company,address,zipcode,emial,othercontact,remark,文本信息表user如表1所示:表 1 文本信息表user属性数据类型说明_idInteger自动增加的主键usernameInteger姓名username_pyString姓名(拼音)mobilephoneString 手机号officephoneString 办公室号familyphoneString 家庭号码positionString 职位companyString 公司地址addressString 地址zipcodeString 邮编emailStr
20、ing 邮箱othercontactString 备注remarkInteger标记5.通讯录的实现5.1Android开发平台搭建搭建Android开发环境需要Eclipse、Java SDK、Android SDK、ADT。Eclipse是一个开放源代码的、基于Java的可扩展开发平台。Java SDK就是JDK,JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment)。Android SDK(Software Development Kit)软件开发工具包。ADT(Android Development Tools)Android开发工具。An
21、droid开发平台搭建步骤如下:(1)首先到http:/www.eclipse.org/downloads/下载Eclipse集成开发环境并且解压(推荐下载Java EE 集成版本)。去 站点下载SDK后安装, droid SDK1.5后解压。第一步下载工序就结束了。 (2)双击Eclipse解压后目录中的eclipse.exe然后启动,选择Eclipse菜单中的Help- Install New Software- Available Software,点击右侧的“Add”输入http:/dl-ssl.google.c om/android/eclipse/后确定,然后在“Work with
22、“下拉菜单中选择刚才输入的网址。过一会就会出现一个Developer Tools选项,勾上以后点击Next以后Eclipse会自动网上查找Android 开发工具插件,然后要到Android DDMS和Android Develop ment Tools,选中这两个点击Finish,Eclipse就会自动下载并安装Android插件了,最后会提示重启Eclipse。(3)重启后选择Eclipse菜单中的Windows- Preferences 在左侧的Android项目中SDK Location中填入Android SDK解压后的目录,然后点击Apply。(4)在Windows XP的系统变量
23、中的path变量中添加一个值,该值指向解压后的Android SDK目录下的tools文件夹。5.2具体功能的实现5.2.1密码设置及密码验证 程序运行首先进入密码设置/输入密码界面,密码设置/验证界面布局如图6。 图 6 密码设置/验证界面布局 界面整个为一个大的LinerLayout,包括三个EditText,和password_manage,new_password, repeat_password,密码通过SharedPreferences存储类保存,通过判断密码是否为空进行控制三个EditText的显示:密码为空,即第一次使用本系统时,显示new_password和 repeat_p
24、assword,为“确认”按钮添加事件监听,点击“确认”时比较新密码及确认密码,两密码一致则进入系统主显示界面,否则提示“密码不一致,然后返回;密码不为空时只显示password_manage,将用户输入的密码和SharedPreferences存储的密码进行比较,一致时进入系统主显示界面,否则提示“密码输入错误”,然后返回。主要实现代码如下:SharedPreferences preferences = getSharedPreferences(password,MODE_PRIVATE);if(preferences.getString(value, 0) = null| preferen
25、ces.getString(value, 0).equals(0) text1.setVisibility(EditText.INVISIBLE); else text2.setVisibility(EditText.INVISIBLE);text3.setVisibility(EditText.INVISIBLE);view2.setVisibility(TextView.INVISIBLE);view3.setVisibility(TextView.INVISIBLE); save.setOnClickListener(new OnClickListener() / 点击事件Overrid
26、epublic void onClick(View v) if (text1.getVisibility() = EditText.INVISIBLE)/ 通过密码输入框的可见性判断当前操作if (!text2.getText().toString().equals(text3.getText().toString() Toast.makeText(PassWord.this, 两次输入密码不一致!, 2000).show(); else SharedPreferences preferences = getSharedPreferences(password, MODE_PRIVATE);S
27、haredPreferences.Editor editor = preferences.edit();editor.putString(value, text2.getText().toString();mit();Intent it = new Intent(PassWord.this, Main.class);PassWord.this.startActivity(it);PassWord.this.finish(); else SharedPreferences preferences = getSharedPreferences(password, MODE_PRIVATE);if
28、(text1.getText().toString().equals(preferences.getString(value, 0) Intent it = new Intent(PassWord.this, Main.class);PassWord.this.startActivity(it);PassWord.this.finish();else Toast.makeText(PassWord.this, 密码输入错误!, 2000).show(););5.2.2主显示界面 密码设置/输入成功后程序进入主显示界面(Main.Activity),Main中进行新建DBHelper,打开数据库
29、,通过adapter获得所有联系人的ListView,如没有联系人信息则设置Title为“没有查到任何数据”,否则将所有信息显示。长按一联系人时通过添加ListView的setOnItemLongClickListener实现标记操作,单击已联系人时通过添加setOnItemClickListener实现Main到联系人详细信息UserDetail的跳转。联系人详细界面中有修改、删除和返回按钮,在选择修改功能后,联系人的所有信息处于可编辑状态,修改完后点击确定按键,触发确定按键点击监听事件,从而对数据库中该联系人信息进行更改,然后自动返回系统主显示界面。在联系人列表中选择某个联系人点击查看联系
30、人详细信息,联系人详细信息一览无余,同时在联系人详细信息界面下面添加通讯能键,这时的联系人信息不可编辑,如果想要对联系人进行修改点击修改功能键对联系信息进行修改。增加界面的布局文件整体为一个LinerLayout,具体布局如图7所示。图 7 增加联系人界面布局5.2.3删除联系人功能删除联系人可有两种不同的操作:使用联系人详细信息(UserDetail)界面下的“删除”按钮;选择主界面底部Menu内的“删除”功能。在查看联系人详细信息时,位置标记常量在本联系人位置,进行删除操作时连接数据库,根据位置常量的值完成删除联系人的操作。使用MENU菜单的“删除”首先需要进行联系人的标记,可一次标记多条
31、,然后根据数据库里标记常量的值对联系人信息进行删除,若没有标记需删除的联系人,则通过一个Toast提示“没有标记任何记录,长按一条记录可实现标记”。5.2.4Menu功能 Menu菜单位于主显示界面的底部,当选择手机Menu键时菜单才可见,为每个菜单选项绑定了一个图标,并添加事件监听实现其对应功能,菜单具体内容如图8所示(为了试图效果,功能测试图片有使用Photoshop处理)。图 8 底部Menu菜单Menu的添加功能:添加联系人是通讯录中最基本的功能操作,在联系人增加界面中点击保存按钮实现对联系人信息的保存。后台操作流程:首先在user类中定义一个user函数从表单中获取数据,建立数据库帮
32、助类,打开数据库并将user保存到数据库中。增加界面如上文图7所示。另外,对头像的ImageButton添加事件监听,创建了一个Gallery,通过点击头像可实现头像图片的选择。主要实现代码如下:btn_save.setOnClickListener(new OnClickListener()public void onClick(View v) /判断姓名是否为空String name = et_name.getText().toString();if(name.trim().equals() Toast.makeText(AddNew.this, 姓名不能为空, Toast.LENGTH_
33、LONG).show();return; /从表单上获取数据User user = new User();user.username = name;user.address = et_address.getText().toString();pany = et_company.getText().toString();user.email = et_email.getText().toString();user.familyPhone = et_familyPhone.getText().toString();user.mobilePhone = et_mobilePhone.getText(
34、).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();/判断头像是否改变,若改变,则用当前的位置,若没有改变,则用前一回的
35、位置if(imageChanged) user.imageId =imagescurrentImagePosition % images.length; else user.imageId =imagespreviousImagePosition%images.length; user.privacy =privacy;/创建数据库帮助类DBHelper helper = new DBHelper(AddNew.this);helper.openDatabase();/打开数据库long result = helper.insert(user); /把user存储到数据库里/通过结果来判断是否
36、插入成功,若为-1,则表示插入数据失败if(result = -1 ) Toast.makeText(AddNew.this, 添加失败, Toast.LENGTH_LONG); setTitle(用户添加成功!);setResult(3);finish(););btn_return.setOnClickListener(new OnClickListener()public void onClick(View v) finish(););imageButton.setOnClickListener(new OnClickListener()public void onClick(View v
37、) loadImage();/为gallery装载图片initImageChooseDialog();/初始化imageChooseDialogimageChooseDialog.show(););Menu的查找功能:在查找功能实现的过程中,先将搜索框中的内容转化为字符串形式,使用模糊查询方法将字符串与数据库中的每个user的username、username_py、phone、officephone、familyphone字符串进行比较,其中username_py不是添加联系人输入的信息,是由username生成对应的username_py,这需要向eclipse添加一个外jar包,通过调用
38、此jar包提供的方法来实现,同样username_py不在联系人详细信息界面显示,它的存在时查询功能更加方便。在查询search_edit中,如果输入为空就设置显示所有联系人的列表,否则就建立一个数据库帮且类,在数据库中进行查找匹配,返回到list列表中,将整合的adapter和listview结合展现出来,并统计查找到的条数动态的展现给用户。查找功能主要实现代码如下:if (searchLinearout = null) searchLinearout = (LinearLayout) findViewById(R.id.ll_search);et_search = (EditText) f
39、indViewById(R.id.et_search);search_btn = (Button) findViewById(R.id.search_btn);InputFilter inputFilter = new InputFilter() public CharSequence filter(CharSequence source, int start,int end, Spanned dest, int dstart, int dend) try int destLen = dest.toString().getBytes(GB18030).length;int sourceLen
40、= source.toString().getBytes(GB18030).length;Log.e(filter, String.valueOf(destLen + sourceLen);String condition = source.toString();if (condition.equals() lv.setAdapter(adapter);DBHelper helper = new DBHelper(Main.this);list = helper.getUsers(condition, privacy);SimpleAdapter searchAdapter = new Sim
41、pleAdapter(Main.this,list,R.layout.listitem,new String imageid, name, mobilephone ,new int R.id.user_image, R.id.tv_name,R.id.tv_mobilephone );lv.setAdapter(searchAdapter); / 将整合好的adapter交给listview,显示给用户看if (list.size() = 0) Drawable nodata_bg = getResources().getDrawable(R.drawable.nodata_bg);mainL
42、inearLayout.setBackgroundDrawable(nodata_bg);setTitle(没有查到任何数据); else setTitle(共查到 + list.size() + 条记录);mainLinearLayout.setBackgroundDrawable(null);return source; catch (UnsupportedEncodingException e) e.printStackTrace();return ;et_search.setFilters(new InputFilter inputFilter );汉字转拼音字符串实现的主要代码如下:
43、public static String getPinYin(String src) 6.2.5 通讯功能测试 在联系人详细信息界面,点击menu键打开通信功能菜单,然后选择打电话、发信息、发邮件的功能通过接口套用识别号码跳转到相应的功能。测试结果如图18、图19、图20所示。由于模拟机没有安装gmail,功能测试时模拟机显示“米有应用程序可执行此操作”。char t1 = null;t1 = src.toCharArray();String t2 = new Stringt1.length; / 设置汉字拼音输出的格式HanyuPinyinOutputFormat t3 = new Hany
44、uPinyinOutputFormat();t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);t3.setVCharType(HanyuPinyinVCharType.WITH_V);String t4 = ;int t0 = t1.length;try for (int i = 0; i t0; i+) / 判断能否为汉字字符if (Character.toString(t1i).matches(u4E00-u9FA5+) t2 = PinyinHelp
45、er.toHanyuPinyinStringArray(t1i, t3);/ 将汉字的几种全拼都存到t2数组中t4 += t20+;/ 取出该汉字全拼的第一种读音并连接到字符串t4后 else / 如果不是汉字字符,间接取出字符并连接到字符串t4后t4 += Character.toString(t1i); catch (BadHanyuPinyinOutputFormatCombination e) e.printStackTrace(); return t4;Menu的删除功能:MENU的删除功能及我们在5.2.3中提到的第二种删除操作方法。主界面底部Menu内的“删除”菜单功能为删除标记的联系人信息,所以选择此菜单时要先判断是否有标记信息,然后将标记的联系人进行批量删除。5.2.5MENU的菜单功能 MENU的菜单功能包括显示所有、删除所有、备份数据、还原数据、修改密码、更新和后退功能。具体布局如图9所示。图 9 MENU菜单布局显示所有:显示所有与联系人列表界面的思路一致,创建一个数据库帮助类从数据库中获得所有