安卓课程设计.doc_第1页
安卓课程设计.doc_第2页
安卓课程设计.doc_第3页
安卓课程设计.doc_第4页
安卓课程设计.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

移动通信课程设计 题 目 联系人管理 姓名学号 院 系 计算机与软件学院 专 业 指导教师 二一二年六月五日27联系人管理1概述1.1 设计平台介绍Android是Google推出的开源手机操作系统。它基于Linux平台,由操作系统、中间件、用户界面和应用软件组成,具有以下5个特点:1、开放性。2、应用程序无界限。3、应用程序是在平等条件下创建的。4、应用程序可以轻松的嵌入网络。5、应用程序可以并行运行。Android平台特性: 1、应用程序框架 支持组件的重用与替换。2、Dalvik 虚拟机 专为移动设备优化。 3、集成的浏览器 基于开源的WebKit 引擎。 4、优化的图形库 包括定制的2D图形库,3D图形库基于OpenGL ES 1.0 (硬件加速可选)。 5、SQLite 用作结构化的数据存储。 6、多媒体支持 包括常见的音频、视频和静态图像格式 (如 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)。 7、GSM 电话技术 (依赖于硬件)。 8、蓝牙Bluetooth, EDGE, 3G, 和 WiFi (依赖于硬件)。 9、照相机,GPS,指南针,和加速度计(accelerometer) (依赖于硬件)。 10、丰富的开发环境 包括设备模拟器,调试工具,内存及性能分析图表,和Eclipse集成开发环境插件。Android 架构:如图1-1图1-1 android架构Android的应用层是用Java语言编写的运行在虚拟机上的程序,我们课程设计中所用到开发语言就是Java。1.2 课题描叙这次课程设计我做的是一个手机联系人管理的小软件,它可以设置联系的详细资料,帮助你记住你朋友的号码,邮编,住址等。把QQ里面的头像图片加载了进来,可以根据你的喜爱设置你的朋友的可爱头像,并且可以把联系人备份到SD卡中,方便保存,以免在刷机等突发情况时丢失联系人信息,下次只要重新从SD卡中导入到手机中即可,非常方便实用。1.3 需求分析这是个信息膨胀的时代,随着网络的发展,我们的朋友越来越多,所以朋友的信息就越来越多了,朋友的手机号码,固定电话号码,家庭住址,邮编等。手机是现在人们最随身带的电子产品之一,所以想到了在手机上做一款联系人管理软件,来帮助我们记录和管理联系人的资料,随时随地都可以看到,方便实用,成本也很低。基于以上的想法,进行了一些简单的可行性分析,主要问题在于技术的实现问题。就我们现在所学,对于实现我们想要的软件功能完全是可能的,所以借助于各种参考文献和网络资料,开始了软件的开发。2移动通信软件的设计2.1功能模块图 手机联系人管理软件包括以下几个功能:增加新的联系人,查找已有的联系人,删除单个联系人,删除所有联系人,修改联系人信息,备份联系人,还原联系人,检查软件更新信息。如图2-1所示:图2-1功能总体模块图2.2系统流程图2.2.1系统整体流程图 用户进入系统后首先看到的是联系人列表界面,如果没有联系人则显示无信息。按下Menw建,我们会看到添加,查找,删除,菜单,退出几个选项,我们可以进行联系人的添加,查找,删除等操作。双击联系人,我们可以进入查看联系人信息的界面,可以进行修改资料,删除等操作。当我们点击菜单选项时,我们会看到显示所有联系人,删除所有,备份,还原,更新等,进行各项操作。如图2-2所示:图2-2系统整体流程图2.2.2添加联系人模块流图添加联系人模块,在我们添加联系人时,会进行名字的判断,联系人列表中是否已经有该联系的名字和信息,如果有则会提醒出现错误,要求你返回联系人列表。所以该数据流图会有一个判定框的功能实现该检查功能。具体的数据流图如图2-3所示:图2-3添加联系人数据流图2.2.3修改联系人数据流图我们在联系人菜单,对联系人进行信息修改时,需要对我们输入的联系人信息进行判断,判断其是否合乎我们要求的格式等,所以进行了一个判定,修改信息错误时会报错,具体功能实现,如下图2-4所示:图2-4修改信息流程图2.2.4删除联系人数据流图删除联系人得原理和添加差不多,只是会提示是否确认删除,以免失误删除重要信息,数据流图2-5所示:图2-5删除联系人数据流图2.2.5备份与还原的数据流图在菜单的选项中,实现数据的备份与还原时,数据是在手机和SD卡之间转换的,导入导出之前都进行确认询问,最终完成操作。具体数据流图如图2-6所示:图2-6数据备份流图2.3软件界面风格设计进行了数据流图的分析之后,开始准备进行软件界面风格的整体和细节设计,主界面,联系人界面,各种操作的界面,都进行了设想与设计,以方便软件功能的实现,由于初次做,所以布局等可能有些不合理,界面比较粗糙。3软件功能的具体实现3.1联系人主界面模块我们打开软件,第一个看到的就是联系人列表,显示联系人得头像,姓名和手机号码信息,很简约的风格,如图5-1所示。按下Menw键,我们可以看到下面会显示出5个功能菜单,所实现的功能是分别是添加新的联系人,查找具体的联系人,删除单个联系人,打开菜单选项和退出软件,如图5-2所示。图5-1联系人列表界面图5-2Menw功能选项此时按下菜单键,会出现菜单的选项,出现如图5-3的功能选项。图5-3菜单的功能选项关键代码:public class Main extends Activity ListView lv;ArrayList list;SimpleAdapter adapter;GridView bottomMenuGrid;GridView mainMenuGrid;View mainMenuView;View loginView;LinearLayout searchLinearout;LinearLayout mainLinearLayout;EditText et_search;EditText et_enter_file_name;AlertDialog mainMenuDialog;AlertDialog confirmDialog;AlertDialog progressDialog;AlertDialog enterFileNameDialog;AlertDialog loginDialog;boolean privacy = false;int markedNum;ArrayList deleteId;String main_menu_itemName = 显示所有, 删除所有, 备份数据, 还原数据, 更新, 后退;/主菜单图片int main_menu_itemSource = R.drawable.showall, R.drawable.menu_delete, R.drawable.menu_backup, R.drawable.menu_restore, R.drawable.menu_fresh, R.drawable.menu_return;String bottom_menu_itemName = 增加, 查找, 删除, 菜单,退出 ;String fileName;int bottom_menu_itemSource = R.drawable.menu_new_user,R.drawable.menu_search,R.drawable.menu_delete, R.drawable.controlbar_showtype_list,R.drawable.menu_exit ; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); mainLinearLayout = (LinearLayout)findViewById(R.id.list_ll); DBHelper helper = new DBHelper(this); helper.openDatabase(); list = helper.getAllUser(privacy); lv = (ListView)findViewById(R.id.lv_userlist); /创建ListView对象 if(list.size() = 0) Drawable nodata_bg = getResources().getDrawable(R.drawable.nodata_bg);mainLinearLayout.setBackgroundDrawable(nodata_bg);setTitle(没有查到任何数据); adapter = new SimpleAdapter(this, list, R.layout.listitem, new Stringimageid,name,mobilephone, new intR.id.user_image,R.id.tv_name,R.id.tv_mobilephone); lv.setAdapter(adapter); lv.setOnItemClickListener(new OnItemClickListener() Overridepublic void onItemClick(AdapterView arg0, View arg1, int arg2,long arg3) HashMap item = (HashMap)arg0.getItemAtPosition(arg2);int _id = Integer.parseInt(String.valueOf(item.get(_id);Intent intent = new Intent(Main.this,UserDetail.class);User user = new User();user._id = Integer.parseInt(String.valueOf(item.get(_id);user.address = String.valueOf(item.get(address);pany = String.valueOf(item.get(company);user.email = String.valueOf(item.get(email);user.familyPhone = String.valueOf(item.get(familyphone);user.mobilePhone = String.valueOf(item.get(mobilephone);user.officePhone = String.valueOf(item.get(officephone);user.otherContact = String.valueOf(item.get(othercontact);user.position = String.valueOf(item.get(position);user.remark = String.valueOf(item.get(remark);user.username = String.valueOf(item.get(name);user.zipCode = String.valueOf(item.get(zipcode);user.imageId = Integer.parseInt(String.valueOf(item.get(imageid);intent.putExtra(user, user);if(searchLinearout != null & searchLinearout.getVisibility()=View.VISIBLE) searchLinearout.setVisibility(View.GONE);startActivityForResult(intent, arg2);); lv.setCacheColorHint(Color.TRANSPARENT); /设置ListView的背景为透明 lv.setOnItemLongClickListener(new OnItemLongClickListener()Overridepublic boolean onItemLongClick(AdapterView arg0, View arg1,int arg2, long arg3) if(deleteId = null) deleteId = new ArrayList();HashMap item = (HashMap)arg0.getItemAtPosition(arg2);Integer _id = Integer.parseInt(String.valueOf(item.get(_id);RelativeLayout r = (RelativeLayout)arg1;ImageView markedView = (ImageView)r.getChildAt(2);if(markedView.getVisibility() = View.VISIBLE) markedView.setVisibility(View.GONE);deleteId.remove(_id); else markedView.setVisibility(View.VISIBLE);deleteId.add(_id);return true; ); Drawable bgDrawable = getResources().getDrawable(R.drawable.list_bg); lv.setSelector(bgDrawable); Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) super.onActivityResult(requestCode, resultCode, data);if(deleteId != null) deleteId.clear();if(resultCode = 3 | resultCode = 4) DBHelper helper = new DBHelper(this); list = helper.getAllUser(privacy); adapter = new SimpleAdapter( this, list, R.layout.listitem, new Stringimageid,name,mobilephone, new intR.id.user_image,R.id.tv_name,R.id.tv_mobilephone); if(list.size() 0) mainLinearLayout.setBackgroundDrawable(null); lv.setAdapter(adapter);if(resultCode = 3) lv.setSelection(list.size(); else lv.setSelection(requestCode);3.2菜单功能实现菜单的功能选项是显示所有联系人,删除所有联系人,备份联系人,还原联系人,检查更新和返回。如图5-4所示为备份功能。图5-4备份功能选项关键代码:private void loadMainMenuDialog() if(mainMenuDialog = null) LayoutInflater li = LayoutInflater.from(this);mainMenuView = li.inflate(R.layout.main_menu_grid, null); mainMenuDialog = new AlertDialog.Builder(this).setView(mainMenuView).create(); mainMenuGrid = (GridView)mainMenuView.findViewById(R.id.gridview); SimpleAdapter menuAdapter = getMenuAdapter(main_menu_itemName, main_menu_itemSource); mainMenuGrid.setAdapter(menuAdapter); mainMenuGrid.setOnItemClickListener(new OnItemClickListener()Overridepublic void onItemClick(AdapterView arg0, View arg1, int arg2,long arg3) switch(arg2)case 0: DBHelper helper = new DBHelper(Main.this); list = helper.getAllUser(privacy); adapter = new SimpleAdapter( Main.this, list, R.layout.listitem, new Stringimageid,name,mobilephone, new intR.id.user_image,R.id.tv_name,R.id.tv_mobilephone); lv.setAdapter(adapter);/显示所有数据 mainMenuDialog.dismiss();break;case 1:AlertDialog.Builder builder = new AlertDialog.Builder(Main.this);confirmDialog = builder.create();builder.setTitle(是否删除所有!?);builder.setPositiveButton(确定, new DialogInterface.OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) DBHelper helper = new DBHelper(Main.this); helper.deleteAll(0); list = helper.getAllUser(privacy); adapter = new SimpleAdapter( Main.this, list, R.layout.listitem, new Stringimageid,name,mobilephone, new intR.id.user_image,R.id.tv_name,R.id.tv_mobilephone); lv.setAdapter(adapter);/显示所有数据 mainMenuDialog.dismiss(););builder.setNegativeButton(取消, new DialogInterface.OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) confirmDialog.dismiss(););builder.create().show();break;case 2:mainMenuDialog.dismiss();new AlertDialog.Builder(Main.this).setTitle(是否需要备份记录到SD卡?).setPositiveButton(确定, new DialogInterface.OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) LayoutInflater li = LayoutInflater.from(Main.this);View backup_view = li.inflate(R.layout.backup_progress, null);progressDialog =new AlertDialog.Builder(Main.this).setTitle(备份正在进行中.).setView(backup_view).create();progressDialog.show();DBHelper helper = new DBHelper(Main.this);helper.backupData(privacy);ProgressBar bar = (ProgressBar) backup_view.findViewById(R.id.pb_backup);Button btn_backup_ok = (Button)backup_view.findViewById(R.id.btn_backuup_ok);bar.setMax(list.size();for(int i=0;i=list.size();i+) bar.setProgress(i);progressDialog.setTitle(备份完成!一共 + list.size() + 条记录);btn_backup_ok.setVisibility(View.VISIBLE);btn_backup_ok.setOnClickListener(new OnClickListener() Overridepublic void onClick(View v) progressDialog.dismiss();mainMenuDialog.dismiss(););).setNegativeButton(取消, null).create().show();break;case 3:LayoutInflater li = LayoutInflater.from(Main.this);View enterFileNameView = li.inflate(R.layout.enterfilename, null);enterFileNameDialog =new AlertDialog.Builder(Main.this).setView(enterFileNameView).setNegativeButton(取消, null).setPositiveButton(确定, new DialogInterface.OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) DBHelper helper = new DBHelper(Main.this);fileName = et_enter_file_name.getText().toString();if(helper.findFile(fileName)new AlertDialog.Builder(Main.this).setTitle(请选择方式).setPositiveButton(覆盖, new DialogInterface.OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) DBHelper helper = new DBHelper(Main.this);helper.deleteAll(0);helper.restoreData(fileName);list = helper.getAllUser(privacy);adapter = new SimpleAdapter(Main.this, list, R.layout.listitem, new Stringimageid,name,mobilephone, new intR.id.user_image,R.id.tv_name,R.id.tv_mobilephone);LayoutInflater li = LayoutInflater.from(Main.this);View backup_view = li.inflate(R.layout.backup_progress, null);progressDialog =new AlertDialog.Builder(Main.this).setTitle(正在还原数据.).setView(backup_view).create();progressDialog.show();ProgressBar bar = (ProgressBar) backup_view.findViewById(R.id.pb_backup);Button btn_backup_ok = (Button)backup_view.findViewById(R.id.btn_backuup_ok);bar.setMax(list.size();for(int i=0;i=list.size();i+) bar.setProgress(i);progressDialog.setTitle(还原完成!一共还原了 + list.size() + 条记录);btn_backup_ok.setVisibility(View.VISIBLE);btn_backup_ok.setOnClickListener(new OnClickListener() Overridepublic void onClick(View v) progressDialog.dismiss();mainMenuDialog.dismiss();if(list.size() != 0) mainLinearLayout.setBackgroundDrawable(null);lv.setAdapter(adapter););).setNegativeButton(添加, new DialogInterface.OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) DBHelper helper = new DBHelper(Main.this);int preNum = list.size();helper.restoreData(fileName);list = helper.getAllUser(privacy);adapter = new SimpleAdapter(Main.this, list, R.layout.listitem, new Stringimageid,name,mobilephone, new intR.id.user_image,R.id.tv_name,R.id.tv_mobilephone);LayoutInflater li = LayoutInflater.from(Main.this);View backup_view = li.inflate(R.layout.backup_progress, null);progressDialog =new AlertDialog.Builder(Main.this).setTitle(正在还原数据.).setView(backup_view).create();progressDialog.show();ProgressBar bar = (ProgressBar) backup_view.findViewById(R.id.pb_backup);Button btn_backup_ok = (Button)backup_view.findViewById(R.id.btn_backuup_ok);bar.setMax(list.size();for(int i=0;i=list.size();i+) bar.setProgress(i);progressDialog.setTitle(还原完成!一共还原了 + (list.size()-preNum) + 条记录);btn_backup_ok.setVisibility(View.VISIBLE);btn_backup_ok.setOnClickListener(new OnClickListener() Overridepublic void onClick(View v) progressDialog.dismiss();mainMenuDialog.dismiss();lv.setAdapter(adapter););).setNeutralButton(取消, new DialogInterface.OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) ).create().show(); else Toast.makeText(enterFileNameDialog.getContext(), 找不到备份文件, Toast.LENGTH_LONG).show();).create();et_enter_file_name = (EditText)enterFileNameView.findViewById(R.id.et_enter_file_name);et_enter_file_name.setText(comm_data);et_enter_file_name.requestFocus();et_enter_file_name.selectAll();enterFileNameDialog.show();adapter = new SimpleAdapter( Main.this, list, R.layout.listitem, new Stringimageid,name,mobilephone, new intR.id.user_image,R.id.tv_name,R.id.tv_mobilephone); lv.setAdapter(adapter);/显示所有数据mainMenuDialog.dismiss();break;3.3删除所选功能长按联系人选项,会选中联系人,然后可以删除所选择的联系人,这个功能对于想删除多个联系人得时候比较方便,其如图5-5所示:关键代码:public boolean onKeyDown(int keyCode, KeyEvent event) if(keyCode = KeyEvent.KEYCODE_MENU) loadBottomMenu();if(bottomMenuGrid.getVisibility() = View.VISIBLE) if(searchLinearout != null & searchLinearout.getVisibility() = View.VISIBLE) searchLinearout.setVisibility(View.GONE);bottomMenuGrid.setVisibility(View.GONE); else bottomMenuGrid.setVisibility(View.VISIBLE);return super.onKeyDown(keyCode, event);private void loadBottomMenu() if(bottomMenuGrid = null) bottomMenuGrid = (GridView) findViewById(R.id.gv_buttom_menu);bottomMenuGrid.setBackgroundResource(R.drawable.channelgallery_bg);bottomMenuGrid.setNumColumns(5);bottomMenuGrid.setGrav

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论