基于android的手机通讯录附程序.docx
《基于android的手机通讯录附程序.docx》由会员分享,可在线阅读,更多相关《基于android的手机通讯录附程序.docx(20页珍藏版)》请在冰豆网上搜索。
![基于android的手机通讯录附程序.docx](https://file1.bdocx.com/fileroot1/2023-6/14/b9208e14-94ba-4178-8276-56d0850962be/b9208e14-94ba-4178-8276-56d0850962be1.gif)
基于android的手机通讯录附程序
20xx-20xx学年x学期
xxxx大学电工电子实验教学中心
创新性实验研究报告
实验项目名称_基于android的手机通讯录_
组长姓名xxx学号xxxxxxxxxxxxxxx
联系电话xxxxxxxxxxxxE-mailxxxxxxxxxxxx@
成员姓名xxx学号xxxxxxxxxxxxx
成员姓名xxx学号xxxxxxxxxxxxxxx
专业电子信息工程班级20xx级x班
指导教师及职称xx
20xx年x月x日
一、实验摘要
随着4G通信技术的发展,无线带和传输速度都得到了大幅度提升。
智能手机终端添加更多内容丰富的用功能提供了良好的平台。
本课题的采用谷歌公司推出的一款基于linux的开源机操作系统-----android系统,利用java语言,eclipse为开发工具对通讯的代码进行编写。
通过对android平台的系统架构和应用程序进初步研究,设计出一款基于android手机的讯录。
此通讯录包括存储,删除,打电话,发信息,发邮件等功能。
Android开发平台是手炫酷应用最好的实验场之一,通过此次计,我要学会以全新的方式和富有个性的创意来诠释掌中的移动应用,本软件利用andrid提供的各种组件对界面进行设计,达到很好的用户体验。
二、实验目的
研究用户使用习惯,以及其他品的操作体验,切实从android用户角度出发,用android开发工具及开发语言,开发出一款可以切实符合大众使习惯,同时功能齐全的通讯录。
从开发语言角度,内存使率角度研究,以便能在不同的手机硬件平台下很好的实现软件的完美运行 。
研究android SDK以及各个操作系统版本差异,以便解决相的版本的程序软件兼容性的问题。
三、实验场地及仪器、设备和材料:
场地:
实验室
设备及仪器:
JavaSDK,Eclipe软件,PC机一台。
四、实验内容
1、实验原理
联系人列表界面主菜单中括添加联系人、搜索联系人、关于及看系统版本号、退出菜单项。
点击添加联系人,则进入联系人添界面,添加成功后返回列表界面。
点击搜索菜单,则进入联系人搜索界面,输入联系人的全名或一字,即可查找相关联系人,点击联系人会进入联系人查看界面,可以对联系人进行辑、删除、拨打电话、发送短信。
添加联系人时,数据由用户入,点击确定按钮,判断数据是否合法(及用户名是否为空),合法则插入到数据库;不合法,提示错信息,让用户重新输入。
编辑联系人时,点击编辑系人菜单,输入修改后的数据,点击确定按钮,判断数据是否合法,合法,则更新数据库;不合法,则返回错信息。
当用户选定一个联系时,点击删除联系人菜单,提示用户是否删除,点击确定按钮,则从数据库中删除此条记录。
2、实验内容
开发流程见下图:
1、增加、删除、编联系人
点击通信录界面中的增加按钮,入增加联系人面。
输入联系人的基本信息,并可根据用户需求增加个性化信息如头像、姓名、手机号码、办室电话、家庭电话、职务职称、单位名称、地址、邮政编码、Email、其他联系方式、备注这些信息,击确认返回主界面。
点击通信录中一个已存在的联系人,进入联系人编辑界面,可修改系人的资料或进行删除联系人操作,完成后退回到主界面。
对列表中联系人的标记,点mnu键弹出功能界面上的删除按键也可进行删除。
还可以在菜单上选择删除全部联系人清空通讯录。
在删除联系人的过程中,系统将提示用户是否继续操作,若放弃操作,则系人信息将继续保存。
2、查找联系人
用户点击menu键打开底部菜单框,底部菜单框为查询系人提供入口,进入通讯录的缺省页面为联系人列表,在列表中看到所有联系人的姓名、电话息排列,用户点击查找按键输入联系人基本信息,通讯录显所有符合查询条件的联系人列表,用户选择一个联系人进入联系人基本信息页面进行其他操作;查询完成,用户按返回键返回主界面。
3、通功能
用户在通录选择联系人进入联系详细信息界面,这时点击menu键打开通信功能框,选择打电话、发信息的功能进行操作。
4、菜单能
通过对menu按的点击,显示底部菜框,包含有增加查找、除、菜单、返回功能,菜单按键则包含显示所有、删除所有等实用功能。
3.实验步骤
3.1调查研究:
了解需求,后用word列出要开发的系统的功能模块,每个大功能块有哪些小功能模块,对于有些需求比较明确相的界面时,在这一步里面可初步定义好少量的界面。
3.2确定功能
首先,需要对软件系进行概要设计,即系统设计概要设计需要对软件系统设计进行考虑,包括系统的基本处理流程、系统的组结构、模块划分、功能分配、接口设计、运行设计、数据结构设和出错处理设计,为软件的详细设计提供基础。
3.3编写程序:
在软件编码阶段,分别现各模块的功能,从而实现对目标系统的功能、性能、接口、界面等方面的要求。
3.3.1界面布局
Android的资源文件保存在/res的子目中。
其中/res/drawable/目录中保存的是图像文件,/res/values目录中保存的是用自定义字符串和颜色的文件,/re/xml目录中保存的是XML格式的数据文件。
所有程序开发阶段可以被调的资源都保存在这些目录中,在对界面进行绘制时要考虑到不同机屏幕大小可能不一样,应尽量兼容大多数手机屏幕尺寸,使之显示无障碍。
3.3.2增加联系人功能
在通讯录中最主要的功操作,也就是联系人的添操作的功能,在联系人增加界面中点击保存按钮实现对联系人信息的保存。
首先在user类定义了一个user函数从表单中获取数据,建立数据库帮助类,打开数据库并将uer保存到数据库中。
3.3.3删除联系人功能
通过光标选择删除的联系人,点击系人然后选择删除可以删除联系人,并且在数据库中删除联系人。
3.3.4查找联系人功能
在查找功能实现的过程中,我先搜索框中的内容转化为字符串形式,如果输入为空就设置显示所有联系人的列表,否就建立一个数据库帮且类,在数据库中进行查找匹配,返回到list列表中,将整合的adapter和listview结展现出来,并统计查找到的条数展现给用户。
3.3.5Menu底部菜单框功能
下面我们将介绍menu的触发式,通过对menu的介绍,我们将了解menu功能设计,对menu键的使用首要建立menu菜单,为每个菜单选绑定了一个图标和文字。
3.3.6通信功能
首先定义了menu键,为menu添了三个选项,并且为每一个item设置图标功。
3.3.7显示所有、删除所有及备份功能
在bottom_menu中菜单功能键包含有显示所有、删除所、以及备份SD卡功能,显示所有与联系人表界面的思路一致,创建一个数据库帮助类从数据库中得所有用户的信息放到list,通过setAdapter将listview与adapter相结合展示出来。
删除所有是数据库中deleteAll这个方法将数据全部删除。
备份文时先AlertDialog.Builder来提示是否需要备份记录到SD卡,如果点击确定就通过helper.backupData(privacy);在数据库中执行备份的方法。
3.3.8数据库操作实现
为了实现联系人在数据库中增加,删除,查找等操作,使用作数据库的核心类android.database.sqlite.SQLiteDatabase。
使用SQLiteOpenHelper的子类来完成创建、打开数据库及各种对数据库的操作。
3.4调试程序:
将编制的序投入实际运行前,用手工或编译方法进行测试,修正法错误和逻辑错误。
3.5运行测试:
利用测试工具按照测试方案和流对产品进行功能和性能测试,根据需要编写不同的测试工具,设计和维护测试统,对测试方案可能出现的问题进行分析和评估。
3.5.1系统测试方法
测试过程按4个步骤进行,即单元测试、成测试、确认测试和系统试及发版测试。
开始是单元测试,集中对用源代码现的每一个程序单元进行测试,检查各个序模块是否正确地实现了规定的功能。
集成测试把已测试过的模块组装来,主要对与设计相关的软件体系结构的构造进行试。
确认测试则是要查已实现的软件是否满足了需求规格说明中确定了的各种需求,以及软件配置是否完全正。
系统测试把已经经过确认的软件纳入实际运行环境中,与其它系统成份组合在一进行测试。
3.5.2编辑联系人功能测试
联系人详细界中有修改、删除和回按钮,在选择修改功能后,联系人的所有信息处于可编辑状态,手机号码和固定电话则被EditView设置为只可输数字,修改完后点击确定按键,触发确定按键点监听事件,从而对数据库中该联系人信息进行更改,然后自动返回联系人浏览界面。
在联系人表中选择某个联系人点击看联系人详细信息,联系人手机、办公室电话、庭电话、职务称等一览无遗,同时在联系人详信息界面下面会出信功能键,这时的联系人信息是不能操作的,如果想要联系人进行修改点击修改功能键对联系信息进行修改。
3.5.3查找联系功能测试
在联系人列表显示中,输入姓名或者码对联系人进行查找,程序自动筛选符合条件的联系人,如果没有符合条件的联系人则不显示。
3.5.4删除联系功能测试
除界面在系统测试中对联系人行删除操作时,可以通过对底部菜单框中删除按键的点击,或者联系人细信息界面中删除。
按键点击,出现提示框询问“是否要删除”。
3.5.5通讯功能测试
在用户在通讯录选择联人进入联系人详细信界面,这时点击menu键打开通信功能框,然后选择打电话、信息还是发邮件的功能通过接口套用识别码跳转到相应的功能。
3.6优化完善:
对解决同一题的几不同的程序,进行比较、修改、调整或重编写程序,把一般程序变换为语句最少、占内存量少、处理速度最快、外部设分时使用效最高的最优程序。
五、实验结果与分析
通讯录界面要求布局合理简约,颜色舒,控制按钮简单明了,让用户一眼就能看出各个按钮的作用及操方法。
能实要求的功能,但又不重复。
要考到不同手机屏幕大小可能不一样,应尽兼容大多数手机屏幕尺寸,使之显示无障碍。
增加联人的界面如图5-1所示
图5-1增加联人界面
查找联系人面如图5-2所示
图5-2查找系人界面
功能菜单界面图5-3所示
5-3功能菜单界面
其他功能界面如图5-4所示
5-4其他功能界面
图5-5menu主页面
根据以上系的测试过程对来联系人进修改的详细测结果如图5-6所示
图5-6修改页面
系统的测试中对联系人进行删除操作,如图5-7所示
图5-7删除页面
系统除了增加删除、查找等基本功能外,还具有打电话、信息、发邮件的功能,在调出联系人信息时按menu键可以弹出能框如图5-8所示
图5-8功能框
六、实验结论
七、指导老师评语及得分:
签名:
年月日
附录:
程序代码
增加界面绘制代码如下:
xmlns:
android="
android:
id="@+id/ScrollView1"
android:
layout_width="fill_parent" //宽度充满父空间
android:
layout_height="wrap_content"//根据内容决定高度
android:
scrollbars="vertical">//滚动条方向为垂直
xmlns:
android="
android:
layout_width="fill_parent"
android:
layout_height="wrap_content"
android:
orientation="vertical">
android:
id="@+id/widget205"
android:
layout_width="fill_parent"
android:
layout_height="wrap_content"
android:
layout_marginLeft="10dp"//左边距为10dp
android:
layout_marginRight="10dp">
android:
scaleType="centerCrop"//按比例缩放图片,保持图片的尺寸比例
>
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"//排列居中 />
android:
layout_height="wrap_content"
android:
layout_width="wrap_content"
android:
text="手机:
"
android:
textSize="20dp" />
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" />//只能输入数字
android:
layout_width="fill_parent"
android:
layout_height="wrap_content"
android:
orientation="horizontal"
android:
layout_marginLeft="10dp"
android:
layout_marginRight="10dp">
return;} //从表单上获取数据
User user = new User();//在user类中定义了一个user函数
user.username = name;
user.address = et_address.getText().toString();
pany = et_company.getText().toString();
user.email = et_email.getText().toString(); tring();
user.remark = et_remark.getText().toString();
user.zipCode = et_zipCode.getText().toString(); //判断头像是否改变,若改变,则用当前的位置,若没有改变,则用前一回的位置
if(imageChanged) {
user.imageId = images[currentImagePosition%images.length];} else {
ENGTH_LONG);}
setTitle("用户添加成功!
");
setResult(3); //返回到上一个Activity,也就是
Main.activity
finish();//销毁当前视图
}
});
删除联系人程序:
if(deleteId == null || deleteId.size() == 0) {
Toast.makeText(Main.this, "没有标记任何记录\n长按一条记录即可标记",
helper.deleteMarked(deleteId);
list = helper.getAllUser(privacy); //重置视图
adapter = new SimpleAdapter(Main.this, list, R.layout.listitem,
newString[]{"imageid","name","mobilephone"},
new int[]{R.id.user_image,R.id.tv_name,R.id.tv_mobilephone});
lv.setAdapter(adapter);
deleteId.clear();}})
.setNegativeButton("取消", null)
.create()
.show() ; }
break;
查找联系人功能:
private void loadSearchLinearout() {
ent arg2) {
String condition = et_search.getText().toString();//获取et_search输入框的输入内容
if(condition.equals("")) {//如果输入的为空
lv.setAdapter(adapter);//设置显示所有数据的listview列表的适配器
}
DBHelper helper = new DBHelper(Main.this);//获取数据库对象
list = helper.getUsers(condition,privacy);//获取用户列表
SimpleAdapter searchAdapter = new SimpleAdapter(Main.this, list, R.layout.listitem,
} else {setTitle( "共查到" + list.size()+" 条记录");
mainLinearLayout.setBackgroundDrawable(null);}
return false;}});}}
menu菜单代码:
String[] bottom_menu_itemName = { "增加", "查找", "删除", "菜单","退出" };
String fileName;
ilist,
R.drawable.menu_exit, };//选择功能图片响应menu点击事件时设置底部菜单是否可见,
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_MENU) {//如果点击menu键
loadBottomMenu();//载入menu功能
if(bottomMenuGrid.getVisibility() == View.VISIBLE) {//设置可视
if(searchLinearout !
= null && searchLinearout.getVisibility() == View.VISIBLE) {//如果选择不为空
且视图为可视
searchLinearout.setVisibility(View.GONE);//设置可视视图不显示
}
bottomMenuGrid.setVisibility(View.GONE);//设置底部视图不显示
} else {
bottomMenuGrid.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView
> arg0, View arg1, int arg2,long arg3) {
switch(arg2){
case0:
{/*增加*/}
case1:
{/*查找*/}
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) {//如果号码为空
lo
//如果之后又一个可用的号码,这直接使用这个号码拨出
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();
}
startActivity(intent);//开始活动
}break;//退出
}}
return super.onMenuItemSelected(featureId, item);
//返回menu选择功能
}
显示所有,删除所有,备份功能程序:
mainMenuGrid.setOnItemClickListener(new OnItemClickListener(){
public voi