




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
基于Android的手機通訊錄設計與實現摘要:隨著第三代通信技術3G的推廣,無線帶寬和傳輸速度得到顯著提升,為智能移動終端添加更多內容豐富的應用提供了良好的平臺。本設計基于谷歌公司新版Linux平臺,以手機操作系統——Android系統為源,采用Java語言,Eclipse作為開發工具,通過對Android平臺系統架構和應用進行研究,設計了一款手機聯系人s.設計包括存儲、刪除、修改、電話、消息致、E-mail致、備份SD卡等功能,滿足用戶對郵件列表的需求。觸點的設計遵循標準的開發流程,首先需要分析,然后確定觸點的功能,然后編寫代碼,調試器,運行程序,優化聲音的程序。本軟件使用Android提供的多種組件來設計界面,可以支持用戶體驗。關鍵詞:安卓;手機通訊錄;智能手機;1簡介1.1研究背景智能手機是指“像個人電腦一樣,具有獨立的操作系統,用戶可以自行安裝軟件、游戲等第三方服務商提供的程序,并通過這些程序不斷擴展手機的功能。一種通過移動通信網絡實現無線網絡接入的手機的總稱。”目前世界上大多數手機廠商都有智能手機產品,芬蘭的諾基亞、美國的蘋果、加拿大的RIM(黑莓),美國摩托羅拉和中國的宏達電(HTC)是智能手機的領導者[1]。智能手機有五個特點:1.具備無線上網能力,即GSM或CDMA1X支持網絡下的GPRS或CDMA網絡支持下的3G網絡。2、人性化,機器功能可根據個人需要進行擴展。3.它是一個開放的操作系統,還可以安裝很多應用程序,讓智能手機的功能可以無限擴展。4.具有PDA功能,包括個人信息管理、日程記事、任務調度、多媒體應用、瀏覽網頁等。5.擴展性能強,第三方軟件支持多[2]。Android是基于Linux的開源操作系統,主要用于便攜設備。目前還沒有統一的中文名稱,中國大陸很多人使用“Android”或“Anzhi”。Android操作系統最初由AndyRubin開發,最初主要支持手機。2005年被谷歌收購投資,成立開放移動聯盟對其進行開發和完善,逐步擴展到平板電腦等領域。Android的主要競爭對手是蘋果的iOS和RIM的黑莓操作系統。2011年第一季度,Android全球市場份額首次超過塞班島,位居全球第一。2012年2月,Android占全球智能手機操作系統市場的52.5%,中國市場份額為68.4%[3]。在這個信息時代,手機已經成為繼固網之后最流行的通訊工具[4]。在這個人與人之間關系更密切的時代,“交流”已經成為生活的必需品。有這樣一個系統可以記錄人與人之間的各種聯系方式——手機通訊系統。目前,中國的通訊錄應用服務商分為三類。第一類是幸運會、名片全能王、二維碼掃描等。這些產品主要用于解決名片交換時輸入困難的問題。而這也導致了這部分廠商缺乏對服務商來說最重要的一點:沒有給用戶持續運營的能力;第二類如Tinder、通訊錄、好友本,以及手機自帶的通訊錄同步服務等。這部分市場主要提供備份服務,幫助用戶解決手機記錄聯系人的問題。第三類是在通訊錄之上提供的擴展應用服務商,比如米聊、微信,可以通過上面致短信,實現各種通訊能力的聚合[5]。1.2研究現狀當今社會的生活節奏越來越快,人們對手機的要求也越來越高。由于手機市場的快速發展,出現了不同類型的手機操作系統。Android是基于Linux內核(kernel)的開放移動平臺操作系統,與WindowsMobile、Symbian等移動操作系統處于同一水平。其中,具有開源代碼優勢的Android系統具有最大的發展前景。與Symbian相比,用戶體驗較差,系統相對封閉,支持的應用較少,終端廠商引入WindowsMobile系統成本較高,娛樂性一般。Android系統引入成本低,應用資源豐富,具有開放性強、用戶體驗好等特點。適應移動互聯網的發展趨勢,滿足移動互聯網產業鏈各方的發展變化。因此,它取得了快速的發展[6]。Android系統除了成本低、用戶體驗好外,采用開源平臺,給終端廠商和開發者更大的靈活性。開發者在程序開發和移植上更方便,不需要考慮廠商方面。針對內容審核等問題,終端廠商可以按需深度定制系統,開發本地化應用環境。隨著終端廠商、電信運營商和第三方應用開發商的推動,用戶可以選擇的應用資源將進一步豐富。各大安卓應用商店如火如荼。它給應用開發者帶來了更多的機會和有吸引力的利潤分享,并且各個應用商店之間的移植和改造成本相對較低。隨著應用商店的不斷發展和開發者的涌入,Android平臺的應用資源優勢正在逐步擴大[7]。從用戶的角度來看,Android良好的發展前景主要源于兩個方面:優秀的用戶體驗和高性價比。從人才需求來看,當前Android人才需求是硬件驅動的Android人才需求,Android人才需求偏向于軟件應用。從目前的招聘需求來看,后者的需求量最大,包括手機游戲、手機端應用軟件等手機應用軟件的開發[8]。職業專家分析稱,由于目前Android技術比較新,還有發展空間,無論是相關書籍、培訓還是大學教育,都處于初級階段,短期內Android人才會緊缺。.長遠來看,隨著各類移動應用和手游的需求不斷增加,也將促使大中小型移動應用開發商加大對Android應用的開發力度,因此Android人才的前景也十分樂觀。生活在信息飛速發展的今天,智能手機的普及已成為不可逆轉的趨勢。作為手機各種功能中最基本的通訊錄,它也成為人們生活中不可或缺的一部分[9]。在這個人與人之間關系更密切的時代,“交流”已經成為生活的必需品。通過手機通訊錄記錄對方的聯系方式,不僅減輕了大腦的負擔,而且不受各種條件的限制。此外,與微博不同,社交網絡和手機通訊錄完全歸用戶所有,而不是特定的公司或服務。只要用戶得到認可,即使不是大公司也能迅速建立起龐大的關系網絡[10]。Frost&Sullivan的王玉泉也多次強調,手機通訊錄是顛覆性創新的金礦,是創業者創新的絕佳平臺。從長遠來看,這是一項重大的環保和便民舉措。根據市場需求,手機通訊錄管理系統記錄的信息一般分為個人、企業、辦公三類。業主聯系方向明確。有針對性的分類使系統具有方便存儲和快速查閱的優勢功能,大大減少了在書籍和名片中機械翻閱搜索過程的時間。同時,根據攜帶手機的特殊性,它在一定程度上比普通證件更方便、更方便人們使用。其次,由于手機是一種便攜的通訊工具,與記事本相比,它會在一定程度上保證聯系人信息的安全,相對避免個人隱私信息泄露造成的損失[11]。綜上所述,手機通訊錄管理系統是一種高效、實時、綠色的管理系統。然而,現在很多通訊錄都一味追求花哨的外觀和復雜的功能。對于大多數用戶來說,很多功能都是無用的,無用的。針對上述缺點,開發了這種通訊錄,優化了各種性能,繼承了通訊錄的常用功能,滿足普通用戶存儲、搜索、刪除、查看的需求。SD卡等功能[12]。1.3主要工作在此背景下,開發基于Android的手機通訊錄具有重要意義。可根據客戶實際需要,開發一款實用的手機通訊錄軟件。本設計主要使用Android的View框架編寫,部分框架使用了Android中的其他組件。具有相對布局的XML布局文件。它包括2個Button,分別實現不同的功能。第一個按鈕是保存內容。輸入聯系人并點擊保存時,實現該功能。說到保存,不得不說,保存信息包括添加新聯系人的頭像、手機、辦公室、家庭、職務、單位名稱、地址、郵編、Email、其他聯系方式、備注等。第二個Button是return,顧名思義就是從add接口返回到上一個接口。響應菜單鍵的觸發事件,設置底部菜單是否可見,通過監聽底部菜單選項,實現底部菜單的添加、查找、刪除、菜單、退出等功能。菜單包括顯示全部、全部刪除和備份功能。在聯系人信息界面,點擊菜單按鈕,會彈出通訊功能框,通過應用致信息、調用、致功能界面實現。1.4本文結構本文首先給出了系統的研究背景,并簡要介紹了手機通訊錄的發展現狀。然后詳細分析了Android的特點、架構以及Android應用的組成和工作機制。詳細提出了軟件架構,以及通訊錄的設計方案;使用Java開源JAR包解析HTML文件,獲取圖片和文字信息;詳細描述了每個界面的布局和實現;數據庫設計模塊進行了詳細的需求分析,分析后得到數據庫設計模塊,主要完成用戶對獲取的內容的存儲、刪除、查詢等操作;使用Android提供的各種組件設計并實現良好的UI效果,實現良好的用戶體驗;軟件的詳細性能優化。2Android技術與理論2.1Android系統開發介紹2.1.1安卓技術介紹的原意是指“機器人”,也指谷歌。2007年11月5日公布的基于Linux平臺的開源移動操作系統名稱。該平臺由操作系統、中間件、用戶界面和應用軟件組成。手機軟件。它采用軟件棧(SoftwareStack,又稱軟件棧)的架構,主要分為三個部分。底層基于Linux內核工作,C語言開發,只提供基本功能;中間層包括函數庫庫和虛擬機VirtualMachine,由C++開發。最上層是各種應用軟件,包括通話程序、短信程序等。應用軟件由各公司開發,使用Java作為編程的一部分,不存在阻礙創新的專有權利壁壘。過去的移動行業。通過與軟硬件開發商、設備制造商、電信運營商等相關方的深入合作,谷歌希望通過建立標準化、開放的移動軟件平臺,在移動行業形成開放的移動軟件平臺。生態系統[13]。Android是面向設備制造商的免費平臺。對于硬件開發人員來說,Android是一個開放平臺。只要廠商有能力,就可以在這個平臺上自由添加獨特的設備或功能,不受手機操作系統廠商的限制。Android是面向手持設備開發人員的高級平臺。平臺上的應用兼容各類Android手機,免去針對各種手機型號開發的麻煩。Android平臺支持多種先進的網絡、圖形和3D處理能力,可用于提供更好的用戶體驗。Android的開放性優于其他封閉的手機系統,因此任何人都可以根據自己的喜好重寫手機系統中的所有功能。這使得越來越多的人關注這個操作系統[14]。Android軟件平臺主要由五部分組成,分別是:關鍵應用程序、應用程序框架和組件、C/C++函數庫、Java程序運行環境、優化的Linux內核[15]。重點應用:Android平臺包括一些重點應用,如收發客戶端程序、短信收發程序、日歷、網頁瀏覽器等,更多有特色的Android應用還有待廣大開發者共同開發。應用程序框架和組件:Android應用程序開發基于框架和組件。Android本身在其框架中提供了很多組件供應用程序調用,開發者也可以在開發應用程序的同時開發新的組件,并將這些組件放入應用程序框架中供自己和其他應用程序調用。C/C++函數庫:Android應用框架下有一組C/C++函數庫,服務于Android應用組件,它們的功能通過組件間接提供給開發者。這些函數庫包括:標準C函數庫、媒體函數庫、瀏覽器引擎、2D和3D圖形庫等[16]。Java程序運行環境:Android的Java程序運行環境包括一套Java核心函數庫和Dalvik虛擬機,有效優化了Java程序的運行過程。Linux內核:Android系統平臺基于優化的Linux內核,提供存儲管理、進程管理、設備驅動等服務,也是手機軟硬件的連接層[17]。Android應用程序基于各種組件(API)。API是Android軟件平臺的重要組成部分,是開發Android應用程序的關鍵。當前活動程序Activity:作為最常用的應用程序組件,幾乎所有的Activity都會通過創建UI窗口與用戶進行交流。Activity有一個生命周期,包括運行、暫停、停止等幾種狀態。狀態之間的轉換可以通過調用onCreate()、onStart()、onRestart()、onResume()、onFreeze()、onPause()、onStop()、onDestory()等方法來實現。啟動一個新的Activity,可以調用startActivity(Intent),也可以調用startSubActivity(Intent,int),通常和onActivityResult(int,int,String,Bundle)配合使用,從Activity中獲取結果并返回對開瓶器它的活動[18]。圖片展示View:View是最基本的UI組件。它在屏幕上占據一個矩形區域,可以用來顯示文字、圖像等,也可以完成圖像事件處理。常用的View方法有:inflate()(GenerateViewfromXMLfile)、onDraw(Canvas)(填充View)、onMeasure(int,int)(測量View的高寬)、onLayout()(完成View的layout)、onKeyDown(int,KeyEvent)(View有按鍵操作時調用)、onFocusChanged(boolean,int)(View獲取或失去焦點時調用)、setOnClilckListener()(設置View點擊事件監聽).View還包含一些子類,如:TextView(布局文件中的文本顯示)、EditText(布局文件中的文本編輯)、Button(按鈕)、ListView(顯示列表)[19]。事件意圖:意圖抽象描述了您要執行的操作。它可以與startActivity一起使用來啟動一個新的活動,并且可以與startService一起使用來啟動一個后臺服務。Intent最重要的作用就是加載activity,它是不同activity之間的橋梁。Intent也可以認為是一種總結操作行為的數據結構。它主要包括兩部分,動作(action)和數據(data)。此外,它還具有一些附加屬性,如類別(意圖類型)、類型(數據類型)等。常用的Intent方法有intent()(構造intent)、addcategory()(添加intent類型)、getAction()(獲取intentaction)、getData()(獲取intent數據)等。數據訪問和共享機制ContentProvider:ContentProvider為應用程序提供了一些訪問方法,包括:Query(Uri,String[],String,String[],String,String,String)(數據信息查詢),insert(Uri,Contentvalues)(在Contentprovider中添加新數據),updata(Uri,Contentvalues,String,String[])(在Conntprovider中更新數據),delect(Uri,String,String[])(刪除數據),Gettype(Uri)(獲取數據類型).其中,Uri表示ContentProvider存儲的數據類型。在執行訪問方法時,需要根據Uri作為路徑標識符[20]來確定訪問哪個ContentProvider。后臺服務Service:Service是在后臺運行的應用程序組件,不直接與用戶交互。當前活動的程序可以使用Context.StartService()啟動一個后臺服務,也可以通過Context.bindService()與后臺服務進行通信。Android的架構由Linux內核、C/C++函數庫、Dalvik虛擬機、應用框架和關鍵應用組成,如圖2-1所示。通過編譯基于框架的應用程序可以減少開發負擔。應用軟件原則上在DalvikVM上運行。圖2-1Android架構圖2.1.2關鍵應用Android平臺包括一些關鍵的應用程序,如收發客戶端程序、短信收發程序、日歷和網頁瀏覽器等,開發者可以在其平臺上開發更有特色的應用程序,使用的開發語言為Java。2.1.3應用框架Android應用程序基于框架和組件。Android本身在其框架中為應用程序調用改進了許多組件。當然,開發者也會打開新的組件,將組件放入應用程序框架中,供自己和其他應用程序調用。2.1.4函數庫Android應用框架是一組C/C++函數庫,為Android應用組件服務,其功能通過組件間接提供給開發者。這些函數庫包括:標準C函數庫、媒體函數庫、瀏覽器引擎、2D和3D圖形庫、基于WEB應用的安全協議SSL、位圖和矢量字體渲染的FreeType和SQLite引擎等。Android的Java程序運行環境包括一套Java核心函數庫和Dalvik虛擬機,有效優化了Java程序的運行過程。所有Android應用程序都在自己的進程中運行,該進程是Dalvik虛擬機的一個實例。Dalvik旨在在單個設備上高效地運行多個虛擬機實例。Dalvik虛擬機的可執行文件以Dalvik可執行格式(.dex)打包。這是一種內存依賴性最小的優化格式。Java編譯器(dx工具)將注冊類和運行時類編譯成.dex格式。Dalvik虛擬機依賴于底層Linux內核提供的功能,如線程機制、內存管理機制等。2.1.5Linux內核_Android系統平臺基于優化的Linux內核,是其系統平臺的核心。提供存儲管理、進程管理、設備驅動等服務,也是手機軟硬件的連接層,為屏蔽硬件和上層軟件提供屏蔽層。2.2Android應用的組成及工作機制對于一個Android應用來說,它是由Activity、IntentReceiver、Service和ContentProvider四個部分組成的,但并不是每個Android應用都必須由這四個部分組成。在應用程序中使用時,需要在配置文件AndroidMainfest中。要配置的xml。該配置文件是每個Android應用程序都需要的,用于定義應用程序的組件、組件的功能和必要條件。2.2.1活動_Activity是應用程序中最重要的構建塊。在Android應用程序中,活動幾乎總是用于與用戶交互。因此,Activity主要負責創建與用戶交互的顯示窗口。您可以在這些窗口中使用它們。通過調用setContentView(View)方法顯示您自己的用戶界面。活動在系統中以活動堆棧的形式進行管理。當一個新的activity啟動時,它被放到棧頂成為一個正在運行的activity,并且新activity之前的activity在activity棧中始終位于新activity的下方,直到新活動退出。從圖2-2可以看出,Activity有3個關鍵循環:(1)Activity的整個生命周期:從第一次調用onCreate(Bundle)到最后調用onDestroyO。所有初始化都在onCreate()中完成,清理在onDestroyO中完成,資源被釋放。(2)Activity的可見生命周期:從onStart()被調用到onStop()被調用。在此期間,即使Activity沒有與用戶交互,用戶也可以在屏幕上看到該Activity。在這兩個方法調用之間,可以維護活動向用戶顯示的資源。onStart()和onStop()方法可以被多次調用,因為活動可以隨時在可見和隱藏之間轉換。(3)activity的后臺生命周期:從調用onResume()直到調用onPause()。這次活動先于所有其他活動并與用戶交互。活動可以在恢復狀態和暫停狀態之間連續轉換。Android使用Intent類在活動之間切換。Intent負責描述應用程序中某個操作的動作、動作中涉及的數據以及附加的數據。根據Intent的描述,負責找到對應的組件,將Intent傳遞給調用組件,完成組件調用。因此,Intent扮演了一種媒體中介的角色,專門提供組件相互調用的相關信息,實現調用者和被調用者之間的解耦。在應用程序中,我們可以通過兩種形式使用Intent:直接Intent、指定組件屬性的Intent,以及通過指定特定的組件類來通知應用程序啟動相應的組件。IndirectIntent,未指定組件屬性的Intent需要包含足夠的信息,以便系統根據該信息在所有可用組件中確定滿足該Intent的組件。圖2-2Activity狀態轉移路徑圖2.2.2意圖接收器IntentReceiver用于響應外部事件。當外部事件發生時,NotificationManager將用于通知用戶。當IntentReceiver被觸發時,系統會在需要時啟動相應的應用程序。例如,在本系統中,當用戶在另一個界面進行操作時,好友致一條消息,該消息會以通知的形式致到當前界面的頂部通知用戶。各種應用程序也可以使用Context。BroadcastIntent()將其IntentReceiver廣播到其他應用程序,以實現應用程序之間的通信。2.2.3服務_服務是提供連續信息的應用程序。它是在應用程序后臺運行的服務。當用戶進行其他活動時,該服務將一直運行在基于Android平臺的即時通訊系統研發與實現的后臺,直到用戶停止服務或服務結束。本系統的客戶端擴展功能是利用Service進行設計開發的。2.2.4內容提供者ContentProvider應用程序可以將其數據保存到文件、SQL數據庫和其他存儲設備中。當應用程序需要使用存儲設備中的數據時,可以使用ContentProvider來完成。使用ContentProvider可以靈活替換底層使用的存儲設備,讓開發者可以專注于應用邏輯的開發,無需考慮底層存儲設備的細節,讓應用系統擁有良好的數據。3需求分析3.1功能需求分析將反映用戶需求并根據用戶需求總結出來的系統邏輯模型轉化為可以實現的物理模型,將整個設計分成單元來解決怎么做的問題。要創建完整的通訊簿,您必須首先添加聯系信息。創建地址簿。整個應用程序應該分為四個模塊,分別是程序啟動、用戶界面、后臺服務和數據庫適配器。模塊之間的關系如圖3-1所示:圖3-1模塊之間的關系從上圖不難看出,后臺服務是整個應用的核心,主要是“數據獲取模塊”,負責周期性地從用戶輸入的內容中獲取信息。后臺服務在程序啟動時由AppWidgetProvider啟動,也可以由用戶界面通過startService()啟動。后臺服務啟動后會一直運行。同時,用戶界面從數據庫中獲取文本信息。一方面可以防止接口因網絡通信不暢而失去響應;另一方面,后臺服務可以及時更新數據,保證數據的準確性。數據庫適配器封裝了SQLite數據庫操作的所有方法,用戶界面和后臺服務調用它來實現數據庫操作。完成用戶界面設計、數據庫設計和模塊設計后,程序設計階段基本完成。要在文本編輯器中切換不同的功能界面,用戶可以點擊菜單按鈕切換到不同的功能界面。不同功能接口的切換如圖3-2所示。圖3-2不同功能界面切換3.2性能需求分析手機軟件必須要有好的用戶體驗,好的用戶體驗體現在以下幾個方面:(1)友好的界面用戶界面應簡潔直觀,設計合理,方便用戶操作,用戶操作更舒適,UI視覺效果好。(2)快速響應快速處理用戶的輸入或請求。對于需要長時間加工的部分,可以給用戶一個提示,告知用戶軟件正在運行。(3)無縫一個常見的無縫問題是應用程序的后臺進程(例如服務或廣播接收器)彈出一個對話框以響應事件,這似乎沒什么大不了的,尤其是當我在模擬器系統時間。但是,當我的應用程序在真實設備上運行并且后臺線程顯示對話框時,我的應用程序當時可能沒有用戶焦點。這導致我的應用程序在活動應用程序后面顯示對話框,或者從當前應用程序中獲取焦點并顯示對話框,而不管用戶當時在做什么(如打字等)。這種行為可能不適用于我的應用程序或用戶。為了避免這些問題,我的應用程序應該利用適當的系統資源——通知類來通知用戶。通過通知,我的應用程序可以通過在狀態欄上顯示圖標來通知用戶發生了事件,而不是獲得焦點并打斷用戶。3.3數據庫需求分析數據結構組織和數據庫文件設計應根據不同用途的需求來確定數據的整體組織。數據庫,顧名思義,就是存儲數據的倉庫。只不過這個倉庫是在電腦存儲設備上,數據是以一定的格式存儲的。數據庫中的數據按照一定的數據模型組織、描述和存儲,重復性少,數據獨立性高,易于擴展,在一定范圍內可以被各種用戶共享。在涉及數據庫的軟件開發中,需要根據要解決的問題的性質和規模,以及所使用的前端程序創建工具,來選擇合適的數據庫類型。用戶數據庫基于SQLite構建。SQLite是一個輕量級數據庫和符合ACID的關系數據庫管理系統。它的設計目標是嵌入式,已經在很多嵌入式產品中得到應用。它占用的資源非常少。在設備中,可能只有幾百K的內存就足夠了。可支持Windows/Linux/Unix等主流操作系統,可結合多種編程語言,如Tcl、PHP、Java等,以及ODBC接口。在數據庫管理系統方面,它的處理速度比所有系統都快。這也是android的性能優勢。系統數據庫的建立完全由Android平臺上的Java代碼執行,通過DVM編譯構建,無需任何輔助工具。由于整個SQLite數據庫是一個非可視化的操作,所以對數據庫的所有操作都是通過執行Java代碼來實現的。查詢功能不使用高級數據庫編程。比較麻煩的一點是如何有機地實現客戶端數據庫的整體結構。實現過程非常抽象,沒有可視化界面和數據庫輔助工具。3.4安全要求Android安全性的一個重要設計點是,默認情況下,應用程序無權對其他應用程序、操作系統或用戶執行有害操作。這些操作包括讀取用戶的私人數據、訪問網絡、保持設備處于活動狀態等。應用程序的進程是一個安全的黑匣子,未經許可不能干擾其他應用程序。4功能設計4.1整體設計一個好的系統設計的步驟決定了程序能否按設計者的目的按時完成,以及能否在規定的時間內按照設計者的要求高質量地完成程序的必要功能。并按照標準的設計步驟對程序進行調試和測試,以便隨著后期的優化而改進,使程序更加健壯和可用。通過對通訊錄功能、系統模塊、用戶需求等綜合分析,制定開發流程。開發流程如圖4-1所示。圖4-1開發流程圖標準開發流程用于確定系統具有用戶管理功能、聯系人增刪改查功能、通訊功能、搜索功能、備份等功能。系統功能框圖如圖4-2所示。增加增加查找刪除菜單詳細信息修改聯系人列表退出刪除顯示所有刪除所有備份返回圖4-2系統功能圖通過對系統功能結構的分析,設計后的系統運行流程為用戶在系統運行后進入通訊錄主界面,可以看到通訊錄。您可以通過在MENU界面點擊添加功能選項來添加新聯系人。您可以通過單擊搜索按鈕對聯系人進行操作。您可以通過選擇聯系人并單擊刪除按鈕來刪除聯系人。您可以通過菜單功能顯示所有聯系人。、刪除所有聯系人、備份SD卡功能。在詳細聯系方式界面,點擊MENU鍵,彈出通訊功能框,選擇撥號鍵或留言鍵。系統運行流程圖如圖4-3所示。圖4-3系統運行流程4.2系統功能設計根據手機功能調查,近10%的消費者會使用手機通訊錄功能。人性化發展。通訊錄從無到有,從英文到中文,歷經十余年的發展。未來的發展趨勢是從通訊錄發展到名片夾,即一個聯系人下有手機、固話、公司、地址、備注等。直接與用戶交互并提供服務。它需要提供良好的用戶體驗,方便用戶操作,接收用戶操作并將這些操作轉化為相應的命令,并利用用戶活動來完成每一項服務。邏輯流。其功能主要包括以下幾個方面。1.添加、刪除、編輯聯系人在通訊錄界面點擊添加按鈕,進入添加聯系人界面。輸入聯系人的基本信息,根據用戶需要添加頭像、手機、辦公室、家庭、職務、單位名稱、地址、郵編、Email、其他聯系方式、備注等個性化信息,點擊確定.返回主界面。點擊通訊錄中已有的聯系人,進入聯系人編輯界面,可以修改聯系人信息或刪除聯系人,完成后返回主界面。對于列表中聯系人的標記,點擊菜單按鈕,在功能界面上彈出刪除按鈕,即可將其刪除。您也可以通過選擇菜單上的刪除所有聯系人來清除通訊錄。在刪除聯系人的過程中,系統會提示用戶是否繼續操作。如果放棄操作,聯系人信息將繼續保存。2.查找聯系人用戶單擊菜單按鈕以打開底部菜單框。底部菜單框提供查詢聯系人的條目。進入通訊錄的默認頁面是聯系人列表。在列表中,您可以看到所有的聯系人和信息排列。用戶單擊搜索按鈕以輸入聯系人。顯示此人的基本信息,通訊錄顯示所有符合查詢條件的聯系人列表。用戶選擇聯系人進入聯系人基本信息頁面進行其他操作;查詢完成后,用戶按回車鍵返回主界面。3.通訊功能用戶在通訊錄中選擇一個聯系人進入聯系人詳情界面,然后點擊菜單按鈕打開通訊功能框,選擇呼叫、致或致功能進行操作。4.菜單功能通過單擊菜單按鈕,顯示底部菜單框,包括添加、搜索、刪除、菜單和返回功能。菜單按鈕包括顯示全部、全部刪除、備份SD卡等實用功能。4.3系統數據庫設計程序庫是通過DVM編譯在Android平臺上執行Java代碼構建的。由于整個SQLite數據庫是一個非可視化的操作,所以對數據庫的所有操作都是通過執行Java代碼來實現的。并且表的設計也盡可能的優化,沒有錯綜復雜的關系,每張表都是獨立的,沒有約束,所以數據庫也是一個獨立的數據庫。為了實現文本管理功能,本系統需要建立文本信息表數據庫。文本信息表數據庫需要包含的屬性有id、name、mobilephone、officephone、familyphone、address、emial、company、remark、imageid,文本信息表數據庫如表4-1所示:表4-1文本信息表數據庫屬性數據類型闡明_ID整數_自增主鍵姓名_整數_手機_細繩[]電話號碼辦公電話_細繩[]辦公號碼家庭電話_細繩[]家庭一個地址細繩地址電子郵件_細繩公司_細繩公司地址備注_整數_標記圖像ID_整數_圖片編號5通訊錄實現5.1Android開發平臺搭建Android的上層應用是Java語言開發的,需要基于Dalvik虛擬機。因此,Google推薦使用繼承Java的主流開發環境Eclipse。只有Eclipse是不夠的,因為Java語言是用來開發的,還應該有SUN提供的JavaSDK(包括JRE:JavaRuntimeEnvironment)。另外,Android應用開發與Java開發有很大的不同,所以也需要Google提供的AndroidSDK。同時,還需要在Eclipse中安裝ADT,為Android開發提供開發工具的升級或變更。是Eclipse下開發工具升級下載的工具。簡而言之,構建Android開發環境來開發Android應用程序需要以下軟件。(1)JavaSDK(2)日食(3)安卓SDK(4)ADTAndroid開發平臺搭建步驟:(1)首先到/downloads/下載Eclipse集成開發環境并解壓。推薦下載JavaEE集成版。到java.sun./javase/downloads/index.jsp站點下載SDK并安裝,下載dl.google./android/android-sdk-windows-1.5_r1.zip,解壓AndroidSDK1.5.第一次下載過程結束。
(2)雙擊Eclipse解壓目錄下的eclipse.exe并啟動,在Eclipse菜單中選擇Help->InstallNewSoftware->AvailableSoftware,點擊右側“Add”,輸入dl-ssl.google。/android/eclipse/OK,然后在“Workwith”下拉菜單中選擇剛才輸入的URL。片刻之后,會出現一個開發者工具選項。勾選后點擊Next,Eclipse會自動在線搜索Android開發工具插件,然后進入AndroidDDMS和AndroidDevelopmentTools,選擇這兩個點擊Finish,Eclipse會自動下載并安裝好Android插件,最后會提示重啟Eclipse。(3)重啟后,在Eclipse菜單中選擇Windows->Preferences,在左側Android項目的SDKLocation中填寫AndroidSDK解壓目錄,然后點擊Apply。(4)在WindowsXP系統變量中的path變量中添加一個值,指向解壓后的AndroidSDK目錄下的tools文件夾。5.2具體功能的實現5.2.1界面布局Android資源文件存儲在/res子目錄中。圖片文件保存在/res/drawable/目錄下,用于自定義字符串和顏色的文件保存在/res/values目錄下,XML格式的數據文件保存在/res/xml目錄下。在程序開發階段可以調用的所有資源都存放在這些目錄中。繪制界面時要考慮不同手機的屏幕尺寸可能不同。它應該盡可能兼容大多數手機屏幕尺寸,使其顯示無障礙。添加界面繪制代碼如下:<線性布局xmlns:android="schemas.android./apk/res/android" android:layout_width="fill_parent"http://寬度為填充 android:layout_height="fill_parent"http://高度被填充 android:orientation="vertical">//方向是垂直的 <ScrollViewandroid:layout_weight="4"http://比例為4:1 android:id="+id/ScrollView1" android:layout_width="fill_parent"http://寬度填充父空間 android:layout_height="wrap_content"http://根據內容決定高度 android:scrollbars="vertical">//滾動條方向是垂直的 <線性布局 xmlns:android="schemas.android./apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" 安卓:方向=“垂直”> <線性布局 android:id="+id/widget205" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp"http://距離距離為10dp android:layout_marginRight="10dp"> <圖像按鈕 android:id="+id/image_button" android:layout_width="60px" android:layout_height="60px" android:src="drawable/icon"http://默認圖片 android:scaleType="centerCrop"http://按比例縮放圖片,保持圖片的大小比例 ></圖像按鈕> <編輯文本 android:id="+id/用戶名" android:layout_width="fill_parent" android:layout_height="wrap_content" 機器人:滾動條=“垂直” android:hint=""http://提示文本內容為空時,出現的提示信息 android:gravity="top"http://頂部垂直排列 android:layout_gravity="center_vertical"http://居中排列 /> </線性布局><線性布局 android:layout_width="fill_parent" android:layout_height="wrap_content" 機器人:方向=“垂直” android:layout_marginRight="10dp" android:layout_marginLeft="10dp"> <文本視圖 android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="手機:" android:textSize="20dp"/> <編輯文本 android:id="+id/手機" android:layout_width="fill_parent" android:layout_height="wrap_content" 機器人:滾動條=“垂直” android:gravity="top"android:hint="手機" android:phoneNumber="true"/>//只能輸入數字 </線性布局> <線性布局 android:layout_width="fill_parent" android:layout_height="wrap_content" 機器人:方向=“水平” android:layout_marginLeft="10dp" android:layout_marginRight="10dp"> <按鈕 android:id="+id/保存" android:layout_width="wrap_content" android:layout_height="wrap_content" 安卓:layout_weight="1" android:text="保存"/> <按鈕 android:id="+id/btn_return" android:layout_width="wrap_content" android:layout_height="wrap_content" 安卓:layout_weight="1" 安卓:文本=“返回”/> </線性布局></線性布局>5.2.2添加聯系人功能通訊錄中最重要的功能操作,即添加聯系人功能,在添加聯系人界面點擊保存按鈕,即可保存聯系人信息。首先在用戶類中定義一個用戶函數從表單中獲取數據,建立一個數據庫助手類,打開數據庫并將用戶保存到數據庫中,添加的界面如圖5-1所示。btn_save.setOnClickListener(newOnClickListener(){ publicvoidonClick(Viewv){//判斷是否為空 Stringname=et_name.getText().toString();//將et_name讀取的文本轉換成字符串 if(name.trim().equals("")){//如果讀取的字符串為空 Toast.makeText(AddNew.this,"不能為空",Toast.LENGTH_LONG).show(); 返回;} //從表單中獲取數據 useruser=newUser();//用戶類中定義了一個用戶函數 user.username=名稱; 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().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(); //判斷頭像是否有變化,如果有,使用當前位置,如果沒有,使用之前的位置 如果(圖像已更改){ user.imageId=images[currentImagePosition%images.length];}else{ user.imageId=圖像[previousImagePosition%images.length];}//創建數據庫助手類 DBHelper助手=新DBHelper(AddNew.this); //打開數據庫 helper.openDatabase(); //將用戶存入數據庫 長結果=helper.insert(user); //通過結果判斷插入是否成功,如果為-1,則表示插入數據失敗 如果(結果==-1){ Toast.makeText(AddNew.this,"添加失敗",Toast.LENGTH_LONG);} setTitle("用戶添加成功!"); 設置結果(3);//返回上一個Activity,也就是Main.activity finish();//銷毀當前視圖} });圖5-1添加聯系人界面5.2.3刪除聯系人功能用光標選中已刪除的聯系人,單擊該聯系人,然后選擇“刪除”即可刪除該聯系人,并在數據庫中刪除該聯系人。刪除聯系人功能如圖5-2所示。 if(deleteId==null||deleteId.size()==0){ Toast.makeText(Main.this,"沒有記錄標記\n長按記錄標記",Toast.LENGTH_LONG).show();}else{ 新的AlertDialog.Builder(Main.this) setTitle("您確定要刪除標記的"+deleteId.size()+"記錄嗎?") .setPositiveButton("OK",newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog,intwhich){ DBHelper助手=新DBHelper(Main.this); helper.deleteMarked(deleteId); list=helper.getAllUser(privacy);//重置視圖 適配器= newSimpleAdapter(Main.this,list,R.layout.listitem, newString[]{"imageid","name","mobilephone"},新的int[]{R.id.user_image,R.id.tv_name,R.id.tv_mobile});lv.setAdapter(適配器); deleteId.clear();}}) .setNegativeButton("取消",null) 。創造() .show() ;}休息;圖5-2刪除聯系人界面5.2.4查找聯系人功能在實現搜索功能的過程中,我首先將搜索框中的內容轉換成字符串形式。如果輸入為空,我將設置要顯示的所有聯系人列表。否則,我將創建一個數據庫來幫助和類在數據庫中進行搜索和匹配。,返回list列表,結合顯示集成適配器和listview,統計找到顯示給用戶的item個數。私人無效負載搜索線性輸出(){ 如果(searchLinearout==null){ searchLinearout=(LinearLayout)findViewById(R.id.ll_search);//通過ID查找searchLinearout的布局 et_search=(EditText)findViewById(R.id.et_search);//通過ID查找et_search的布局 et_search.setOnKeyListener(newOnKeyListener(){//設置et_search的監聽器 公共布爾onKey(查看arg0,intarg1,KeyEventarg2){ Stringcondition=et_search.getText().toString();//獲取et_search輸入框的輸入內容 if(condition.equals("")){//如果輸入為空 lv.setAdapter(adapter);//設置顯示所有數據的listview列表的適配器} DBHelperhelper=newDBHelper(Main.this);//獲取數據庫對象 list=helper.getUsers(condition,privacy);//獲取用戶列表 簡單適配器搜索適配器= 新的SimpleAdapter(Main.this,列表,R.layout.listitem,新字符串[]{"imageid","name","mobilephone"},新的int[]{R.id.user_image,R.id.tv_name,R.id.tv_mobile}); lv.setAdapter(searchAdapter);//將集成適配器交給listview并顯示給用戶 if(list.size()==0){ drawablenodata_bg=getResources().getDrawable(R.drawable.nodata_bg);//獲取圖片資源 mainLinearLayout.setBackgroundDrawable(nodata_bg);//設置布局的背景 setTitle("沒有找到數據"); }else{setTitle(“找到的總數”+list.size()+“記錄”); mainLinearLayout.setBackgroundDrawable(null);} 返回錯誤;}});}}5.2.5菜單底部菜單框功能接下來介紹菜單的觸發方式。通過菜單的介紹,我們將了解菜單的功能設計。要使用菜單鍵,首先要建立菜單菜單,并為每個菜單選項綁定一個圖標和文字。代碼如下。底部菜單如圖5-3所示。 String[]bottom_menu_itemName={"添加"、"搜索"、"刪除"、"菜單"、"退出"}; 字符串文件名; 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,};//選擇功能圖片設置響應菜單點擊事件時底部菜單是否可見,publicbooleanonKeyDown(intkeyCode,KeyEventevent){ if(keyCode==KeyEvent.KEYCODE_MENU){//如果菜單鍵被點擊 加載底部菜單();//加載菜單功能 if(bottomMenuGrid.getVisibility()==View.VISIBLE){//設置可見性 if(searchLinearout!=null&&searchLinearout.getVisibility()==View.VISIBLE){//如果選擇不為空且視圖可見 searchLinearout.setVisibility(View.GONE);//設置視覺視圖不顯示} bottomMenuGrid.setVisibility(View.GONE);//設置底視圖不顯示 }別的{ bottomMenuGrid.setVisibility(View.VISIBLE);//設置底部視圖可見 }} returnsuper.onKeyDown(keyCode,event);//返回一個點擊結果}圖5-3菜單底部菜單然后聽底部菜單選項,代碼如下:bottomMenuGrid.setOnItemClickListener(newOnItemClickListener(){ publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,longarg3){ 開關(arg2){ 案例0:{/*增量*/}案例1:{/*找到*/}案例2:{/*刪除*/}案例3:{/*菜單*/}案例4:{/*退出*/}5.2.6通訊功能以下程序定義了用戶鍵入、致和致文本消息的功能。下面的代碼主要使用了android操作系統的自定義接口,這些接口可以用來實現用戶打字、發短信、致等功能。首先定義了菜單鍵,在菜單中增加了三個選項,并為每個項目設置了圖標功能。通信功能如圖5-4所示。圖5-4通訊功能界面建立菜單鍵時,為每個MenuItem添加一個事件,一共添加了三個事件。代碼功能如下: publicbooleanonMenuItemSelected(intfeatureId,MenuItemitem){//設置菜單鍵選擇功能 switch(item.getItemId()){通過switch選擇不同的id 案例菜單.FIRST:{ //設置狀態為命中 狀態=Intent.ACTION_CALL; if(callData==null){//加載可用 loadAvailableCallData();//加載 }if(callData.length==0){//提示不可用 Toast.makeText(this,"Nothingavailable!",Toast.LENGTH_LONG).show(); }elseif(callData.length==1){ //如果有的話直接用這個表盤 Intentintent=newIntent(Intent.ACTION_CALL,Uri.parse("tel://"+callData[0]));//設置一個新的intent對象 startActivity(intent);//啟動活動事件 }別的{ //如果有2個或更多,彈出選擇對話框 initNumChooseDialog();//選擇 }break;//跳出 } 案例菜單.FIRST+1:{ 狀態=Intent.ACTION_SENDTO;//設置狀態為短信 if(callData==null){//如果為空 loadAvailableCallData();//加載 }if(callData.length==0){//提示不可用 Toast.makeText(this,"Nothingavailable!",Toast.LENGTH_LONG).show(); }elseif(callData.length==1){ //如果以后有另一個可用,則直接使用此撥出Intentintent=newIntent(Intent.ACTION_SENDTO,Uri.parse("smsto://"+callData[0]));//設置一個新的intent對象 開始活動(意圖);//開始活動事件 }別的{ initNumChooseDialog();} //初始化 休息;} 案例菜單.FIRST+2:{ if(user.email.equals("")){Toast.makeText(this,"Nothingavailable!",Toast.LENGTH_LONG).show(); }別的{uriemailUri=Uri.parse("mailto:"+user.email);//設置uri為致的uriIntentintent=newIntent(Intent.ACTION_SENDTO,emailUri);//設置一個新的intent對象 startActivity(intent);//開始活動 }break;//退出}}返回super.onMenuItemSelected(featureId,item);//返回菜單選擇函數}5.2.7顯示全部、全部刪除和備份功能在bottom_menu中包括顯示全部、全部刪除、備份SD卡等功能。全部顯示的思路與聯系人列表界面的思路相同。創建一個數據庫助手類,用于從數據庫中獲取所有用戶的信息,并將其放入列表中。列表視圖通過setAdapter與適配器一起顯示。刪除所有是數據庫中的deleteAll方法刪除所有數據。備份文件時,AlertDialog.Builder會提示是否需要將記錄備份到SD卡。如果單擊確定,則可以使用helper.backupData(privacy);在數據庫中執行備份方法。詳細代碼如下。全部顯示、全部刪除、備份功能如圖5-5所示。mainMenuGrid.setOnItemClickListener(newOnItemClickListener(){ publicvoidonItemClick(AdapterView<?>arg0,查看arg1,intarg2, 長arg3){switch(arg2){ 案例0:{ DBHelper助手=新DBHelper(Main.this); list=helper.getAllUser(privacy); 適配器=新的SimpleAdapter(Main.this,列表,R.layout.listitem, 新字符串[]{"imageid","name","mobilephone"}, newint[]{R.id.user_image,R.id.tv_name,R.id.tv_mobile});lv.setAdapter(adapter);//顯示所有數據 mainMenuDialog.dismiss(); 休息;} 情況1:{ AlertDialog.Builderbuilder=newAlertDialog.Builder(Main.this); 確認對話框=builder.create(); builder.setTitle("是否刪除所有!?");builder.setPositiveButton("確定",newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog,intwhich){ DBHelperhelper=newDBHelper(Main.this); helper.deleteAll(0); list=helper.getAllUser(privacy); adapter=newSimpleAdapter(Main.this, list, R.layout.listitem,newString[]{"imageid","name","mobilephone"},newint[]{R.id.user_image,R.id.tv_name,R.id.tv_mobilephone}); lv.setAdapter(adapter);//顯示所有數據 mainMenuDialog.dismiss();}}); builder.setNegativeButton("取消",newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhich){confirmDialog.dismiss(); }}); builder.create().show(); 休息; } 案例2:{ mainMenuDialog.dismiss(); 新的AlertDialog.Builder(Main.this) .setTitle("你需要備份記錄到SD卡嗎?") .setPositiveButton("OK",newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog,intwhich){ LayoutInflaterli=LayoutInflater.from(Main.this); 查看backup_view=li.inflate(R.layout.backup_progress,null); progressDialog= newAlertDialog.Builder(Main.this).setTitle("正在備份中...") .setView(backup_view) 。創造(); 進度對話框.show(); DBHelper助手=新DBHelper(Main.this); helper.backupData(隱私); ProgressBarbar=(ProgressBar)backup_view.findViewById(R.id.pb_backup); 按鈕btn_backup_ok=(按鈕)backup_view.findViewById(R.id.btn_backuup_ok); bar.setMax(list.size()); for(inti=0;i<=list.size();i++){ bar.setProgress(i); } progressDialog.setTitle("備份完成!一共"+list.size()+"條記錄"); btn_backup_ok.setVisibility(View.VISIBLE); btn_backup_ok.setOnClickListener(newOnClickListener(){ 公共無效onClick(查看v){ progressDialog.dismiss(); mainMenuDialog.dismiss();} });} }) .setNegativeButton("取消",null) .create().show();break;}圖5-5顯示全部、全部刪除、備份功能5.2.8數據庫操作實現為了實現在數據庫中添加、刪除、搜索聯系人等操作,使用核心類android.database.sqlite.SQLiteDatabase對數據庫進行操作。使用SQLiteOpenHelper的子類來創建、打開數據庫并對數據庫執行各種操作。數據庫的類繼承函數展示了數據庫類的繼承關系:類MyDBHelper擴展SQLiteOpenHelper{ publicMyDBHelper(上下文上下文,字符串名稱, intversion){//公共MyDBHelper對象 超級(上下文,名稱,空,版本);//繼承上面的}我使用數據庫中的openDatabase方法打開數據庫。公共無效開放數據庫(){ 如果(dbInstance==null){ myDBHelper=newMyDBHelper(context,DB_DBNAME,VERSION); dbInstance=myDBHelper.getWritableDatabase();}將聯系人信息插入數據庫,我設置了一個新的ContentValues,并通過user對象將聯系人信息存儲在values中。 公共長插入(用戶用戶){ ContentValues值=新ContentValues();//設置一個新的容器對象 values.put("name",user.username); values.put("手機",user.mobilePhone); values.put("officephone",user.officePhone); values.put("familyphone",user.familyPhone); values.put("地址",user.address); values.put("othercontact",user.otherContact); values.put("email",user.email); values.put("位置",user.position); values.put("公司",用戶公司); values.put("remark",user.remark); values.put("imageid",user.imageId);//儲存用戶相關
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《智能手機維修教程》課件
- 鐵路橋隧無損檢測任務二無損檢測基本理論課件
- 鐵道機車專業教學鄭州鐵路課件
- 鐵路安全監測與預警系統講師劉新強課件
- 鐵路工程安全技術石家莊鐵路21課件
- 鐵路集裝箱運輸組織單元集裝箱運輸作業流程課件
- 2025年吉林醫學高等專科學校單招考試題庫
- 合同糾紛處理辦法
- 個人終止租房合同協議書范本
- 版體育場地使用權租賃合同
- 2024年阜陽太和縣第二人民醫院招聘筆試真題
- 招商引資知識培訓課件
- 癌癥治療協議書模板
- 2025年平頂山文化藝術職業學院高職單招職業技能測試近5年常考版參考題庫含答案解析
- 弘揚航天精神中國航天日主題宣教課件
- 上海市寶山區上海交大附中2024-2025學年高考生物試題模擬試卷(8)生物試題含解析
- 南京鐵道職業技術學院招聘筆試真題2023
- 對口支援鄉鎮衛生院工作醫師考核登記表
- 裝配式疊合板樓板安裝施工方案
- 北京市中小學生天文知識競賽復習題庫
- GJB300797靜電標準doc
評論
0/150
提交評論