![安卓課程設計.doc_第1頁](http://file.renrendoc.com/FileRoot1/2019-11/4/42384440-56d1-4635-8c20-ba377dbdc89b/42384440-56d1-4635-8c20-ba377dbdc89b1.gif)
![安卓課程設計.doc_第2頁](http://file.renrendoc.com/FileRoot1/2019-11/4/42384440-56d1-4635-8c20-ba377dbdc89b/42384440-56d1-4635-8c20-ba377dbdc89b2.gif)
![安卓課程設計.doc_第3頁](http://file.renrendoc.com/FileRoot1/2019-11/4/42384440-56d1-4635-8c20-ba377dbdc89b/42384440-56d1-4635-8c20-ba377dbdc89b3.gif)
![安卓課程設計.doc_第4頁](http://file.renrendoc.com/FileRoot1/2019-11/4/42384440-56d1-4635-8c20-ba377dbdc89b/42384440-56d1-4635-8c20-ba377dbdc89b4.gif)
![安卓課程設計.doc_第5頁](http://file.renrendoc.com/FileRoot1/2019-11/4/42384440-56d1-4635-8c20-ba377dbdc89b/42384440-56d1-4635-8c20-ba377dbdc89b5.gif)
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
移動通信課程設計 題 目 聯(lián)系人管理 姓名學號 院 系 計算機與軟件學院 專 業(yè) 指導教師 二一二年六月五日27聯(lián)系人管理1概述1.1 設計平臺介紹Android是Google推出的開源手機操作系統(tǒng)。它基于Linux平臺,由操作系統(tǒng)、中間件、用戶界面和應用軟件組成,具有以下5個特點:1、開放性。2、應用程序無界限。3、應用程序是在平等條件下創(chuàng)建的。4、應用程序可以輕松的嵌入網絡。5、應用程序可以并行運行。Android平臺特性: 1、應用程序框架 支持組件的重用與替換。2、Dalvik 虛擬機 專為移動設備優(yōu)化。 3、集成的瀏覽器 基于開源的WebKit 引擎。 4、優(yōu)化的圖形庫 包括定制的2D圖形庫,3D圖形庫基于OpenGL ES 1.0 (硬件加速可選)。 5、SQLite 用作結構化的數據存儲。 6、多媒體支持 包括常見的音頻、視頻和靜態(tài)圖像格式 (如 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)。 7、GSM 電話技術 (依賴于硬件)。 8、藍牙Bluetooth, EDGE, 3G, 和 WiFi (依賴于硬件)。 9、照相機,GPS,指南針,和加速度計(accelerometer) (依賴于硬件)。 10、豐富的開發(fā)環(huán)境 包括設備模擬器,調試工具,內存及性能分析圖表,和Eclipse集成開發(fā)環(huán)境插件。Android 架構:如圖1-1圖1-1 android架構Android的應用層是用Java語言編寫的運行在虛擬機上的程序,我們課程設計中所用到開發(fā)語言就是Java。1.2 課題描敘這次課程設計我做的是一個手機聯(lián)系人管理的小軟件,它可以設置聯(lián)系的詳細資料,幫助你記住你朋友的號碼,郵編,住址等。把QQ里面的頭像圖片加載了進來,可以根據你的喜愛設置你的朋友的可愛頭像,并且可以把聯(lián)系人備份到SD卡中,方便保存,以免在刷機等突發(fā)情況時丟失聯(lián)系人信息,下次只要重新從SD卡中導入到手機中即可,非常方便實用。1.3 需求分析這是個信息膨脹的時代,隨著網絡的發(fā)展,我們的朋友越來越多,所以朋友的信息就越來越多了,朋友的手機號碼,固定電話號碼,家庭住址,郵編等。手機是現(xiàn)在人們最隨身帶的電子產品之一,所以想到了在手機上做一款聯(lián)系人管理軟件,來幫助我們記錄和管理聯(lián)系人的資料,隨時隨地都可以看到,方便實用,成本也很低?;谝陨系南敕?,進行了一些簡單的可行性分析,主要問題在于技術的實現(xiàn)問題。就我們現(xiàn)在所學,對于實現(xiàn)我們想要的軟件功能完全是可能的,所以借助于各種參考文獻和網絡資料,開始了軟件的開發(fā)。2移動通信軟件的設計2.1功能模塊圖 手機聯(lián)系人管理軟件包括以下幾個功能:增加新的聯(lián)系人,查找已有的聯(lián)系人,刪除單個聯(lián)系人,刪除所有聯(lián)系人,修改聯(lián)系人信息,備份聯(lián)系人,還原聯(lián)系人,檢查軟件更新信息。如圖2-1所示:圖2-1功能總體模塊圖2.2系統(tǒng)流程圖2.2.1系統(tǒng)整體流程圖 用戶進入系統(tǒng)后首先看到的是聯(lián)系人列表界面,如果沒有聯(lián)系人則顯示無信息。按下Menw建,我們會看到添加,查找,刪除,菜單,退出幾個選項,我們可以進行聯(lián)系人的添加,查找,刪除等操作。雙擊聯(lián)系人,我們可以進入查看聯(lián)系人信息的界面,可以進行修改資料,刪除等操作。當我們點擊菜單選項時,我們會看到顯示所有聯(lián)系人,刪除所有,備份,還原,更新等,進行各項操作。如圖2-2所示:圖2-2系統(tǒng)整體流程圖2.2.2添加聯(lián)系人模塊流圖添加聯(lián)系人模塊,在我們添加聯(lián)系人時,會進行名字的判斷,聯(lián)系人列表中是否已經有該聯(lián)系的名字和信息,如果有則會提醒出現(xiàn)錯誤,要求你返回聯(lián)系人列表。所以該數據流圖會有一個判定框的功能實現(xiàn)該檢查功能。具體的數據流圖如圖2-3所示:圖2-3添加聯(lián)系人數據流圖2.2.3修改聯(lián)系人數據流圖我們在聯(lián)系人菜單,對聯(lián)系人進行信息修改時,需要對我們輸入的聯(lián)系人信息進行判斷,判斷其是否合乎我們要求的格式等,所以進行了一個判定,修改信息錯誤時會報錯,具體功能實現(xiàn),如下圖2-4所示:圖2-4修改信息流程圖2.2.4刪除聯(lián)系人數據流圖刪除聯(lián)系人得原理和添加差不多,只是會提示是否確認刪除,以免失誤刪除重要信息,數據流圖2-5所示:圖2-5刪除聯(lián)系人數據流圖2.2.5備份與還原的數據流圖在菜單的選項中,實現(xiàn)數據的備份與還原時,數據是在手機和SD卡之間轉換的,導入導出之前都進行確認詢問,最終完成操作。具體數據流圖如圖2-6所示:圖2-6數據備份流圖2.3軟件界面風格設計進行了數據流圖的分析之后,開始準備進行軟件界面風格的整體和細節(jié)設計,主界面,聯(lián)系人界面,各種操作的界面,都進行了設想與設計,以方便軟件功能的實現(xiàn),由于初次做,所以布局等可能有些不合理,界面比較粗糙。3軟件功能的具體實現(xiàn)3.1聯(lián)系人主界面模塊我們打開軟件,第一個看到的就是聯(lián)系人列表,顯示聯(lián)系人得頭像,姓名和手機號碼信息,很簡約的風格,如圖5-1所示。按下Menw鍵,我們可以看到下面會顯示出5個功能菜單,所實現(xiàn)的功能是分別是添加新的聯(lián)系人,查找具體的聯(lián)系人,刪除單個聯(lián)系人,打開菜單選項和退出軟件,如圖5-2所示。圖5-1聯(lián)系人列表界面圖5-2Menw功能選項此時按下菜單鍵,會出現(xiàn)菜單的選項,出現(xiàn)如圖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); /創(chuàng)建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菜單功能實現(xiàn)菜單的功能選項是顯示所有聯(lián)系人,刪除所有聯(lián)系人,備份聯(lián)系人,還原聯(lián)系人,檢查更新和返回。如圖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刪除所選功能長按聯(lián)系人選項,會選中聯(lián)系人,然后可以刪除所選擇的聯(lián)系人,這個功能對于想刪除多個聯(lián)系人得時候比較方便,其如圖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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年三角底荷花筆筒項目可行性研究報告
- 2025至2030年多功能深蹲練習器項目投資價值分析報告
- 2025至2030年中國全自動單支吸管紙(膜)包裝機數據監(jiān)測研究報告
- 自助燒烤活動方案
- ??普Z文練習試題附答案
- 建筑工程咨詢服務合同協(xié)議書
- 外幣資金借貸合同
- 高效解決方案與實踐指南
- 北京市房屋出租委托代理協(xié)議書范本
- 商業(yè)房房屋出租合同范本
- 2024年安徽省高校分類對口招生考試數學試卷真題
- ISO45001管理體系培訓課件
- 動畫課件教學教學課件
- 小學生心理健康講座5
- 綿陽市高中2022級(2025屆)高三第一次診斷性考試(一診)數學試卷(含答案逐題解析)
- 貴州省房屋建筑和市政工程標準監(jiān)理電子招標文件(2023年版)
- 高級職業(yè)培訓師(三級)職業(yè)資格鑒定考試題及答案
- 小學英語800詞分類(默寫用)
- 真實世界研究指南 2018
- JBT 7946.3-2017 鑄造鋁合金金相 第3部分:鑄造鋁合金針孔
- 2024年燃氣輪機值班員技能鑒定理論知識考試題庫-上(單選題)
評論
0/150
提交評論