




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 實(shí)習(xí)報(bào)告實(shí)習(xí)性質(zhì): 畢業(yè)實(shí)習(xí) 學(xué)生姓名: xxxxxxx 專業(yè)班級(jí): xxxxxxx 指導(dǎo)教師三號(hào)黑體 行 距:固定值40磅:xxxxxxxxxxxxxxxx 實(shí)習(xí)時(shí)間:2014年2月24日- 2014年5月11日 實(shí)習(xí)地點(diǎn): xxxxxxxxxxxxxxxx有限公司 Xxxxxxxxx大學(xué)學(xué) 生 實(shí) 習(xí) 考 核 表學(xué)生姓名專業(yè)班級(jí)指 導(dǎo) 教 師Xxxx計(jì)算機(jī)網(wǎng)絡(luò)xxx三號(hào)黑體 行 距:固定值40磅xxxx實(shí)習(xí)時(shí)間2014年2月24日- 2014年5月11日實(shí)習(xí)地點(diǎn)校外實(shí)習(xí)名稱畢業(yè)實(shí)習(xí)自我總結(jié) 畢業(yè)的磬鐘時(shí)時(shí)縈繞我的心間,幾年的大學(xué)時(shí)光已經(jīng)悄然而逝,馬上就到了畢業(yè)的季節(jié)。曾經(jīng)看著一批批的學(xué)姐
2、學(xué)長(zhǎng)們離開校園,感覺那時(shí)候的我們離畢業(yè)兩個(gè)詞是多么的遙遠(yuǎn)。雖然曾經(jīng)也經(jīng)歷過初中高中的畢業(yè),但這次不同,這次的畢業(yè)代表著我們真正意義上的脫離學(xué)校這個(gè)大家庭,開始邁向社會(huì)。 如今的我,也以一名畢業(yè)生的身份進(jìn)入了社會(huì)工作中,在社會(huì)上扮演者android開發(fā)工程師的角色,面對(duì)如今這個(gè)科技突飛猛進(jìn)的時(shí)代,作為以為it開發(fā)者,我在這為期兩學(xué)期的實(shí)習(xí)時(shí)光里,體會(huì)到了許多以前不曾在學(xué)校感受學(xué)到的東西。體會(huì)到生活的不易,找工作的艱辛,社會(huì)的壓力以及社會(huì)生活的復(fù)雜,也教會(huì)我如何適應(yīng)這個(gè)社會(huì),在不斷失敗和犯錯(cuò)的教訓(xùn)下成長(zhǎng)。指導(dǎo)教師意見實(shí)習(xí)單位意見并蓋章(院內(nèi)實(shí)習(xí)由系簽署)考核等級(jí)信息工程學(xué)院 畢業(yè) 實(shí)習(xí)報(bào)告 目錄1
3、 實(shí)習(xí)目的12 實(shí)習(xí)概況12.1 實(shí)習(xí)要求12.2 實(shí)習(xí)時(shí)間22.3 實(shí)習(xí)環(huán)境22.4 開發(fā)環(huán)境22.5 開發(fā)前景23 實(shí)習(xí)內(nèi)容33.1 需求分析33.2 Android架構(gòu)圖33.3 Android 生命周期53.4軟件下載73.5Android開發(fā)環(huán)境搭建84應(yīng)用程序基礎(chǔ)104.1Android應(yīng)用程序框架104.2 Android應(yīng)用程序組成104.3API參考文檔的使用125通訊錄實(shí)例135.1DBHelper主體135.2效果圖265.2.1主界面265.2.2存儲(chǔ)界面(MENU菜單)275.2.3聯(lián)系人界面(MENU菜單)276時(shí)鐘286.1 步驟287 實(shí)習(xí)總結(jié)32II1 實(shí)習(xí)目
4、的畢業(yè)實(shí)習(xí)是一個(gè)適應(yīng)社會(huì)的緩沖期,是加深對(duì)自我能力認(rèn)識(shí)的重要途徑。大學(xué)的學(xué)習(xí)基本上都是理論的接受,而缺少能力的熟練與加強(qiáng),我們?nèi)鄙俚牟⒉皇侵R(shí)的儲(chǔ)備,而是能力的積蓄。但由于大學(xué)特殊的學(xué)習(xí)模式和環(huán)境,缺少實(shí)際情景的見證和實(shí)踐活動(dòng)的參與,同學(xué)之間缺乏必要的交流和比對(duì),使得我們很多時(shí)候很難對(duì)自身的能力有明晰的認(rèn)識(shí),能力缺陷往往被遮蔽起來。在大學(xué)期間,我們學(xué)習(xí)了很多的知識(shí),但是很多知識(shí)局限于基礎(chǔ)知識(shí)上,很淺顯的知識(shí),沒有經(jīng)過系統(tǒng)化的學(xué)習(xí)練習(xí),而社會(huì)這一大學(xué)校就是教會(huì)我們?nèi)绾稳⑽覀冊(cè)诖髮W(xué)里面所學(xué)的東西進(jìn)行加深,能得到系統(tǒng)化的學(xué)習(xí)梳理,將學(xué)到的東西實(shí)時(shí)的運(yùn)用到社會(huì)工作中產(chǎn)生實(shí)時(shí)的價(jià)值,對(duì)社會(huì)的前進(jìn)和發(fā)展
5、起到推動(dòng)作用,并在這個(gè)過程中發(fā)揮個(gè)人才能,創(chuàng)造剩余價(jià)值,實(shí)現(xiàn)人生價(jià)值。成為一名合格的社會(huì)人。隨著采用Android系統(tǒng)的谷歌手機(jī)、平板電腦等產(chǎn)品逐漸擴(kuò)大市場(chǎng)占有 率,Android平臺(tái)人才的缺口日益顯現(xiàn)。據(jù)業(yè)內(nèi)統(tǒng)計(jì),目前國(guó)內(nèi)的3G研發(fā)人才缺口有三、四百萬,其中Android研發(fā)人才缺口至少30萬。職場(chǎng)專家 指出,想要從事Android開發(fā)的人員,除了基礎(chǔ)的計(jì)算機(jī)技術(shù)知識(shí)要扎實(shí)之外,要根據(jù)各類企業(yè)、各類崗位的不同需求,補(bǔ)充與崗位相關(guān)的Android技術(shù)知識(shí)。但由于大學(xué)特殊的學(xué)習(xí)模式和環(huán)境,缺少實(shí)際情景的見證和實(shí)踐活動(dòng)的參與,同學(xué)之間缺乏必要的交流和比對(duì),使得我們很多時(shí)候很難對(duì)自身的能力有明晰的認(rèn)
6、識(shí),能力缺陷往往被遮蔽起來。Android一詞的本義指“機(jī)器人”,同時(shí)也是Google于2007年11月5日宣布的基于Linux平臺(tái)的開源手機(jī)操作系統(tǒng)的名稱,該平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成。據(jù)職酷網(wǎng)數(shù)據(jù)統(tǒng)計(jì)顯示:目前熱招的Android技術(shù)相關(guān)崗位約有3882個(gè),而一個(gè)月內(nèi)的有效崗位量在2298個(gè)。主要熱招職位包括 Android開發(fā)工程師、Android軟件工程師、Android應(yīng)用開發(fā)工程師、系統(tǒng)驅(qū)動(dòng)工程師,Android手機(jī)游戲開發(fā)、Android系統(tǒng) 軟件開發(fā)、 Android程序員、Android游戲應(yīng)用版本管理、人機(jī)交互分析工程師、Android中間層開發(fā)工程師等
7、。從人才需求類型來看,目前對(duì)Android人才需求一類是偏向硬件驅(qū)動(dòng)的Android人才需求,一類是偏向軟件應(yīng)用的Android人才需求。從目 前的招聘需求來看,后者的需求最大,包括手機(jī)游戲、手機(jī)終端應(yīng)用軟件和其他手機(jī)應(yīng)用軟件的開發(fā)。據(jù)職酷網(wǎng)職位搜索庫(kù)統(tǒng)計(jì)顯示,目前企業(yè)對(duì)這類應(yīng)用軟件的 Android開發(fā)人才占總需求的72%。應(yīng)用開發(fā)商加大對(duì)Android應(yīng)用的開發(fā)力度,因此Android人才的就業(yè)前景也非常廣泛。因此,我希望通過這次的在外實(shí)習(xí)更好的把自己塑造成一個(gè)滿足社會(huì)需求的建設(shè)性人才,同時(shí)也用自己的技術(shù)證明“我能行”。2 實(shí)習(xí)概況2.1 實(shí)習(xí)要求一方面,要求學(xué)生通過畢業(yè)前有針對(duì)性的實(shí)習(xí)為
8、勝任今后的工作打下基礎(chǔ);另一方面,要求學(xué)生通過實(shí)習(xí)了解社會(huì),了解企業(yè),培養(yǎng)學(xué)生主動(dòng)適應(yīng)社會(huì)上的各種崗位需要的素質(zhì)和能力。2.2 實(shí)習(xí)時(shí)間2014年2月24日- 2014年5月11日2.3 實(shí)習(xí)環(huán)境(1)實(shí)習(xí)單位:xxxxxxx有限公司(2)簡(jiǎn)介:xxxxxxx有限公司是一家致力于為我市廣大小微企業(yè)服務(wù) 的電子商務(wù)高科技企業(yè),借助本公司的移動(dòng)電子商務(wù)平臺(tái),為小微企業(yè)提供包括營(yíng)銷推廣、投資融資、管理培訓(xùn)、財(cái)務(wù)咨詢及企業(yè)信息化等服務(wù)。(3)所在部門:軟件開發(fā)部(4)主要工作:android手機(jī)客戶端的設(shè)計(jì)、編碼以及測(cè)試和后期的維護(hù)、更新、升級(jí)等工作。2.4 開發(fā)環(huán)境l 操作系統(tǒng)(Windows7)l
9、 開發(fā)工具(Eclipse)l 客戶瀏覽器(IE)l 開發(fā)語(yǔ)言(Java)2.5 開發(fā)前景市場(chǎng)上:現(xiàn)在2.2技術(shù)應(yīng)該已經(jīng)成型了,但是目前產(chǎn)品是2.2的貌似不是很多,在嵌入式的角度來說,前景應(yīng)該不錯(cuò),手機(jī)領(lǐng)域就不用說了,汽車導(dǎo)航,電子消耗品,它的界面我認(rèn)為遠(yuǎn)比塞班和wince要好吧,而且,開放軟件是個(gè)趨勢(shì),這樣,系統(tǒng)的市場(chǎng)占有率才能高,支持的軟件多,自然生命周期,效益比率上都高。技術(shù)上:現(xiàn)在國(guó)內(nèi)Android的軟件的開發(fā)人員應(yīng)該也不少了,而且基于linux內(nèi)核,linux內(nèi)核也是趨勢(shì),現(xiàn)在Android封裝linux那部分的類和函數(shù)感覺懂的人相對(duì)也不是很多。在挑戰(zhàn)性和技術(shù)掌握上,Android都
10、是優(yōu)勢(shì)。支持上:國(guó)內(nèi)對(duì)google的態(tài)度.有的時(shí)候服務(wù)器上不去,可能一點(diǎn)開發(fā)中平臺(tái)的小問題,就是人家一句話就解決的問題,可能要耽誤開發(fā)周期,或者說,影響開發(fā)心情.所以整體來說Android的前景還是很好的。3 實(shí)習(xí)內(nèi)容基于Android的手機(jī)通訊錄的開發(fā)。 SDK、JDK的界面以及使用 Eclipse軟件的使用 Android編程方法 Activities的生命周期 基于Android的數(shù)據(jù)庫(kù)創(chuàng)建與連接 手機(jī)通訊錄中存儲(chǔ)數(shù)據(jù)的導(dǎo)入導(dǎo)出3.1 需求分析 隨著手機(jī)市場(chǎng)的飛速發(fā)展,手機(jī)已成為我們生活必不可少的一部分,無論是在吃飯、走路還是在公交車上,我們總是看見形形色色的人群拿著五花八門的手機(jī),或打
11、電話,或聊天等等。而近幾年來,突如其來的android手機(jī)浪潮以迅雷不急掩耳之勢(shì)迅速占據(jù)手機(jī)市場(chǎng)。面對(duì)android手機(jī)市場(chǎng)龐大的需求,我毅然決定步入android開發(fā)行業(yè)。通過這一學(xué)期對(duì)android的初步了解,我用已有的知識(shí)寫了一個(gè)小的程序系統(tǒng)以及一些了解的基本知識(shí)。主要設(shè)計(jì)到手機(jī)通訊方面的數(shù)據(jù)的導(dǎo)入導(dǎo)出,添加、刪除以及一個(gè)小時(shí)鐘問題。3.2 Android架構(gòu)圖 Android系統(tǒng)架構(gòu)和一些普遍的操作系統(tǒng)差不多,都是采用了分層的架構(gòu),從他們之間的架構(gòu)圖看,Android系統(tǒng)架構(gòu)分為四個(gè)層,從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運(yùn)行庫(kù)層和linux核心層。1.應(yīng)用程序 Andr
12、oid 會(huì)同一系列核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括 email客戶端,SMS 短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是使用JAVA 語(yǔ)言編寫的。2.應(yīng)用程序框架 開發(fā)人員也可以完全訪問核心應(yīng)用程序所使用的API框架。該應(yīng)用程序的架構(gòu)設(shè)計(jì)簡(jiǎn)化了組件的重用;任何一個(gè)應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊不過得遵循框架的安全性限制)。同樣,該應(yīng)用程序重用機(jī)制也使用戶可以方便的替換程序組件。 隱藏在每個(gè)應(yīng)用后面的是一系列的服務(wù)和系統(tǒng), 其中包括;豐富而又可擴(kuò)展的視圖(Views),可以用來構(gòu)建應(yīng)用程序, 它包括列表(lists)
13、,網(wǎng)格(grids),文本框(text boxes),按鈕(buttons), 甚至可嵌入的web 瀏覽器。內(nèi)容提供器(Content Providers)使得應(yīng)用程序可以訪問另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫(kù)), 或者共享它們自己的數(shù)據(jù)資源管理器(Resource Manager)提供 非代碼資源的訪問,如本地字符串,圖形,和布局文件( layout files )。通知管理器 (Notification Manager) 使得應(yīng)用程序可以在狀態(tài)欄中顯示自定義的提示信息。活動(dòng)管理器( Activity Manager) 用來管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能。 3.程序庫(kù) And
14、roid 包含一些C/C+庫(kù),這些庫(kù)能被 Android 系統(tǒng)中不同的組件使用。它們通過 Android 應(yīng)用程序框架為開發(fā)者提供服務(wù)。以下是一些核心庫(kù): 系統(tǒng) C 庫(kù) - 一個(gè)從 BSD 繼承來的標(biāo)準(zhǔn) C 系統(tǒng)函數(shù)庫(kù)( libc ), 它是專門為基于embedded linux 的設(shè)備定制的。 媒體庫(kù) - 基于 PacketVideo OpenCORE;該庫(kù)支持多種常用的音頻、視頻格式回放和錄制,同時(shí)支持靜態(tài)圖像文件。編碼格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。Surface Manager - 對(duì)顯示子系統(tǒng)的管理,并且為多個(gè)應(yīng)用程序提 供了2D
15、 和 3D 圖層的無縫融合。LibWebCore - 一個(gè)最新的web 瀏覽器引擎用,支持Android 瀏覽器和一個(gè)可嵌入的web 視圖。SGL - 底層的 2D 圖形引擎3D libraries - 基于 OpenGL ES 1.0 APIs 實(shí)現(xiàn);該庫(kù)可以使用硬件 3D加速(如果用)或者使用高度優(yōu)化的3D 軟加速。FreeType -位圖(bitmap)和矢量(vector)字體顯示。SQLite 一個(gè)對(duì)于所有應(yīng)用程序可用,功能強(qiáng)勁的輕型關(guān)系型數(shù)據(jù)庫(kù)引擎。 3.3 Android 生命周期在 Android 中,多數(shù)情況下每個(gè)程序都是在各自獨(dú)立的 Linux 進(jìn)程中運(yùn)行的。當(dāng)一個(gè)程序或其
16、某些部分被請(qǐng)求時(shí),它的進(jìn)程就“出生”了;當(dāng)這個(gè)程序沒有必要再運(yùn)行下去且系統(tǒng)需要回收這個(gè)進(jìn)程的內(nèi)存用于其他程序時(shí),這個(gè)進(jìn)程就接控制。這和我們編寫桌面應(yīng)用程序時(shí)的思維有一些不同,一個(gè)桌面應(yīng)用程序的進(jìn)程也是在其他進(jìn)程或用戶請(qǐng)求時(shí)被創(chuàng) 建,但是往往是在程序自身收到關(guān)閉請(qǐng)求后執(zhí)行一個(gè)特定的動(dòng)作(比如從 main 函數(shù)中 return)而導(dǎo)致進(jìn)程結(jié)束的。要想做好某種類型的程序或者某種平臺(tái)下的程序的開發(fā),最關(guān)鍵的就是要弄清楚這種類型的程序或整個(gè)平臺(tái)下的程序的一般工作 模式并熟記在心。在 Android 中,程序的生命周期控制就是屬于這個(gè)范疇我的個(gè)人理解。 在 Android 系統(tǒng)中,當(dāng)某個(gè) activity
17、調(diào)用 startActivity(myIntent) 時(shí),系統(tǒng)會(huì)在所有已經(jīng)安裝的程序中尋找其 intent filter 和 myIntent 最匹配的一個(gè) activity,啟動(dòng)這個(gè)進(jìn)程,并把這個(gè) intent 通知給這個(gè) activity。這就是一個(gè)程序的“生”。比如我們?cè)?Home application 中選擇 “Web browser”,系統(tǒng)會(huì)根據(jù)這個(gè) intent 找到并啟動(dòng) Web browser 程序,顯示 Web browser 的一個(gè) activity 供我們?yōu)g覽網(wǎng)頁(yè)(這個(gè)啟動(dòng)過程有點(diǎn)類似我們?cè)谠趥€(gè)人電腦上雙擊桌面上的一個(gè)圖標(biāo),啟動(dòng)某個(gè)應(yīng)用程序)。在 Android 中,所
18、有的應(yīng)用程序“生來就是平等的”,所以不光 Android 的核心程序甚至第三方程序也可以發(fā)出一個(gè) intent 來啟動(dòng)另外一個(gè)程序中的一個(gè) activity。Android 的這種設(shè)計(jì)非常有利于“程序部件”的重用。 一個(gè) Android 程序的進(jìn)程是何時(shí)被系統(tǒng)結(jié)束的呢?通俗地說,一個(gè)即將被系統(tǒng)關(guān)閉的程序是系統(tǒng)在內(nèi)存不足(low memory)時(shí),根據(jù)“重要性層次”選出來的“犧牲品”。一個(gè)進(jìn)程的重要性是根據(jù)其中運(yùn)行的部件和部件的狀態(tài)決定的。各種進(jìn)程按照重要性從高到低排列如 下: 1. 前臺(tái)進(jìn)程。這樣的進(jìn)程擁有一個(gè)在屏幕上顯示并和用戶交互的 activity 或者它的一個(gè)IntentReciver
19、 正在運(yùn)行。這樣的程序重要性最高,只有在系統(tǒng)內(nèi)存非常低,萬不得已時(shí)才會(huì)被結(jié)束。 2. 可見進(jìn)程。在屏幕上顯示,但是不在前臺(tái)的程序。比如一個(gè)前臺(tái)進(jìn)程以對(duì)話框的形式顯示在該進(jìn)程前面。這樣的進(jìn)程也很重要,它們只有在系統(tǒng)沒有足夠內(nèi)存運(yùn)行所有前臺(tái)進(jìn)程時(shí),才會(huì)被結(jié)束。 3. 服務(wù)進(jìn)程。這樣的進(jìn)程在后臺(tái)持續(xù)運(yùn)行,比如后臺(tái)音樂播放、后臺(tái)數(shù)據(jù)上傳下載等。這樣的進(jìn)程對(duì)用戶來說一般很有用,所以只有當(dāng)系統(tǒng)沒有足夠內(nèi)存來維持所有的前臺(tái)和可見進(jìn)程時(shí),才會(huì)被結(jié)束。 4. 后臺(tái)進(jìn)程。這樣的程序擁有一個(gè)用戶不可見的 activity。這樣的程序在系統(tǒng)內(nèi)存不足時(shí),按照 LRU 的順序被結(jié)束。 5. 空進(jìn)程。這樣的進(jìn)程不包含任何活
20、動(dòng)的程序部件。系統(tǒng)可能隨時(shí)關(guān)閉這類進(jìn)程。 3.4軟件下載Android SDK,網(wǎng)址是 .JDK6的下載地址 。Eclipse的下載網(wǎng)址是 /downloads/ 3.5Android開發(fā)環(huán)境搭建第一步:下載Android SDK到官方下載Android SDK,網(wǎng)址是 ./sdk/index.html 。 Android 1.5之前Google提供了Android SDK開發(fā)的完整下載,在Android 1.6之后Google只提供了安裝工具在線安裝。 單擊“android-sdk-windows.zip”鏈接進(jìn)行SDK下載,下載該文件后解
21、壓該文件到操作系統(tǒng)的任意目錄下。打開目錄找到SDK Setup.exe可執(zhí)行文件,雙擊執(zhí)行該文件。 選擇"Available Packages",選擇想安裝的版本(我是全選了,省事),然后單擊“Install Selected”->選擇“Accept All”,再單擊“Install Accepted”就可以在線安裝了。 提示:如果你的“Available Packages”右側(cè)的地址不能打開,請(qǐng)選擇左側(cè)列表的“Setting”選項(xiàng),在右側(cè)的設(shè)置中勾選“Fore https:/.”第二步:安裝JDKA下載JDK。Android SDK需要JDK5
22、以上的版本。JDK6的下載地址 。 B安裝JDK。下載完成后進(jìn)行正常雙擊、安裝,這里就不說了。 C配置Java環(huán)境變量 1配置Java Home。復(fù)制Java的安裝路徑,右鍵單擊“我的電腦”->“屬性”->“高級(jí)”>“環(huán)境變量”中新建環(huán)境變量java_home,變量值為java安裝路徑。 2配置Path。右鍵單擊“我的電腦”->“屬性”->“高級(jí)”>“環(huán)境變量”,在“系統(tǒng)環(huán)境變量”中編輯Path便來了個(gè),添加Java的bin目錄到其中。變量與變量中間使用分號(hào)“;”分隔。 3配置classpath。
23、右鍵單擊“我的電腦”->“屬性”->“高級(jí)”>“環(huán)境變量”,在“系統(tǒng)環(huán)境變量”中新建一個(gè)系統(tǒng)變量名稱為“classpath”,變量值為半角句號(hào)“.”如下圖:第三步:下載EclipseADT插件要求Eclipse的版本是3.3以上,Eclipse的下載網(wǎng)址是 /downloads/ 。下載后解壓可以直接使用。下載安裝ADT。這里介紹通過Eclipse在線更新的方式安裝。1啟動(dòng)Eclipse,選擇“Help”->“Install New Software.”2單擊“Add.”添加一個(gè)更新站點(diǎn)(注意:站點(diǎn)http后面不要加s)否則可能
24、連接失敗。(Name:ADT 0.9.5;Location: http:/dl- )3添加好后,勾選“Developer Tools”單擊“Next”進(jìn)行更新安裝。4應(yīng)用程序基礎(chǔ)4.1Android應(yīng)用程序框架 4.1.1 程序框架4.2 Android應(yīng)用程序組成一般的android應(yīng)用程序由4部分組成分別是:ActivityBroadcast Intent ReceiverServiceContent Provider 并不是說所有的應(yīng)用程序都是由這四個(gè)部分組成,有的簡(jiǎn)單的應(yīng)用只需要Activity就可以了,有的只需要Broadcast Intent Receiver就可以了。 在andr
25、oid項(xiàng)目里邊有個(gè)AndroidManifest.xml文件,這個(gè)文件非常重重要,就和A中的web.config文件一樣,應(yīng)用中要用到的組件都要首先在這個(gè)文件中進(jìn)行描述聲明后才可以正常使用,否則程序中用到了上述的組件了,也不會(huì)起作用。一、Activity 組件 Activity是開發(fā)android應(yīng)用的過程中使用的最頻繁的組件,它是android的最基本的組件之一。在android程序中Activity代表了手機(jī)的一個(gè)屏幕,好比A應(yīng)用中的一個(gè)網(wǎng)頁(yè),一個(gè)android應(yīng)用相當(dāng)于一個(gè)web站點(diǎn)。在Activity中我們可以添加View,并且對(duì)View做一些操作,View可以理解為一個(gè)UI容器,在這
26、個(gè)容器中可以添加很多UI 元素,比如:Button,TextView,EditView,List等,這些豐富的UI元素組成了和用戶交互的時(shí)的豐富的用戶界面,Activity控制著View中各個(gè)元素的邏輯處理和導(dǎo)航,比如Activity1跳轉(zhuǎn)到Activity2,當(dāng)然也可以在Activity2關(guān)閉的時(shí)候返回一個(gè)值給Activity1這個(gè)和A中彈出一個(gè)對(duì)話框,當(dāng)關(guān)閉對(duì)話框時(shí)返回一個(gè)值給原頁(yè)面是一樣的,這樣在開發(fā)中解決很多問題是非常方便的。 Android的導(dǎo)航是由一個(gè)stack控制,當(dāng)打開一個(gè)新的屏幕時(shí)原來的屏幕會(huì)被置為暫停狀態(tài),并且壓入歷史堆棧,用戶可以通過返回操作來彈出棧頂?shù)钠聊徊⒃O(shè)置為當(dāng)前操
27、作的屏幕界面。android會(huì)把每個(gè)應(yīng)用從開始到當(dāng)前的每一個(gè)屏幕的頁(yè)面都?jí)喝氲蕉褩V?,在開發(fā)過程中可以有選擇的移除一些堆棧中不會(huì)用到的界面。Activity是由android系統(tǒng)進(jìn)行維護(hù)的,它有自己的生命周期。二、Broadcast Intent Receiver組件 可以使用BroadcastReceiver來讓應(yīng)用對(duì)一個(gè)外部的事件作出響應(yīng),因此利用這個(gè)組件可以做一些很有意思的事情,我之前寫的一篇Android中發(fā)送和接收短信就是用BroadcastReceiver組件來實(shí)現(xiàn)的。當(dāng)電話和短信這個(gè)外部事件發(fā)生時(shí)就可以利用BroadcastReceiver組件來進(jìn)行處理。BroadcastRec
28、eiver不能直接生成與用戶交互的界面,因?yàn)榻缑媸怯葾ctivity負(fù)責(zé)的,換句話說對(duì)用戶來說是不透明的,用戶看不到它,這個(gè)和Windows Service 類似,但是BroadccastReceiver可以通過NotificationManager來通知用戶發(fā)生了什么事情,也可以使用Toast來通知用戶。要使用BroadcastReceiver組件,首先要在AndroidManifest.xml中進(jìn)行注冊(cè)或者在代碼中使用Context.registerReceiver()進(jìn)行注冊(cè),只要注冊(cè)了,當(dāng)事件發(fā)生了,即使應(yīng)用沒有啟動(dòng),android也會(huì)自動(dòng)啟動(dòng)應(yīng)用,來響應(yīng)發(fā)生的事件。三、Service
29、組件 Service是一種程序,它可以運(yùn)行很長(zhǎng)時(shí)間,但它和BroadcastReceiver組件一樣也沒有界面,這些服務(wù)可以提供系統(tǒng)的某些能力,來供調(diào)用,它更像是一組API。例如播放音樂的Sevice,它可以控制音樂的播放,停止。通過startService(Intent service)可以啟動(dòng)一個(gè)service,可以通過Context.BindService()綁定一個(gè)Service。四、Content Provider組件 數(shù)據(jù)在android中是私有的不能進(jìn)行共享,這些數(shù)據(jù)包括文件和數(shù)據(jù)庫(kù),但是如果一個(gè)應(yīng)用要使用另一個(gè)應(yīng)用的數(shù)據(jù)在怎么做呢?那么這個(gè)時(shí)候Content Provider就
30、派上用場(chǎng)了,一個(gè)Content Provider定義了一組標(biāo)準(zhǔn)的方法的接口,能使其它應(yīng)用保存和讀取此Content Privider的各種數(shù)據(jù),那么怎么來實(shí)現(xiàn)呢?那就是通過去實(shí)現(xiàn)Contnent Privider的接口就可以了,Content Privider已經(jīng)實(shí)現(xiàn)了數(shù)據(jù)的封裝和處理,外界是看不到數(shù)據(jù)的具體存儲(chǔ)細(xì)節(jié),只需要通過這些標(biāo)準(zhǔn)的接口打交道就可以了,可以讀取數(shù)據(jù),刪除數(shù)據(jù),插入數(shù)據(jù)等等操作。例如android的基本應(yīng)用Contects就就通過這種方式共享通訊錄數(shù)據(jù)的,其它應(yīng)用可以通過Content Provider組件操作通訊錄中的數(shù)據(jù)。 圖4.2.1 android應(yīng)用包生成過程4.
31、3API參考文檔的使用包(Package)的索引 Interfaces Classes Enums Exceptions類(Class)的索引 擴(kuò)展和實(shí)現(xiàn)內(nèi)容 按包名的繼承關(guān)系(可用于反找包) Overview(概覽) XML Attributes(XML的屬性) Constants(常量) Constructors(構(gòu)造函數(shù)) Methods(方法)5通訊錄實(shí)例5.1DBHelper主體public class DBHelper public static final String DB_DBNAME="contact"public static final String
32、 DB_TABLENAME="user"public static final int VERSION = 4;public static SQLiteDatabase dbInstance; private MyDBHelper myDBHelper;private StringBuffer tableCreate;private Context context;public DBHelper(Context context) this.context = context;public void openDatabase() if(dbInstance = null) m
33、yDBHelper = new MyDBHelper(context,DB_DBNAME,VERSION);dbInstance = myDBHelper.getWritableDatabase();/* * 往數(shù)據(jù)庫(kù)里面的user表插入一條數(shù)據(jù),若失敗返回-1 * param user * return 失敗返回-1 *public long insert(User user) ContentValues values = new ContentValues();values.put("name", user.username);values.put("mobi
34、lephone", user.mobilePhonevalues.put("officephone", user.officePhone);values.put("familyphone", user.familyPhone);values.put("address", user.address);values.put("othercontact", user.otherContact);values.put("email",user.email);values.put("p
35、osition", user.position);values.put("company", pany);values.put("zipcode", user.zipCode);values.put("remark", user.remark);values.put("imageid", user.imageId);values.put("privacy", user.privacy);return dbInstance.insert(DB_TABLENAME, null, value
36、s);/* 獲得數(shù)據(jù)庫(kù)中所有的用戶,將每一個(gè)用戶放到一個(gè)map中去,然后再將map放到list里面去返回 * param privacy * return list */public ArrayList getAllUser(boolean privacy) ArrayList list = new ArrayList();Cursor cursor = null;if(privacy) cursor = dbInstance.query(DB_TABLENAME, new * 獲得數(shù)據(jù)庫(kù)中所有的用戶,將每一個(gè)用戶放到一個(gè)map中去,然后再將map放到list里面去返回 * param pri
37、vacy * return list */public ArrayList getAllUser(boolean privacy) ArrayList list = new ArrayList();Cursor cursor = null;if(privacy) cursor = dbInstance.query(DB_TABLENAME, new String"_id","name","mobilephone","officephone","familyphone","address
38、","othercontact","email","position","company","zipcode","remark","imageid", "privacy=1", null, null, null, null); else cursor = dbInstance.query(DB_TABLENAME, new String"_id","name","mobilep
39、hone","officephone","familyphone","address","othercontact","email","position","company","zipcode","remark","imageid", "privacy=0",null, null, null, null); while(cursor.moveToNext() Hash
40、Map item = new HashMap();item.put("_id", cursor.getInt(cursor.getColumnIndex("_id");item.put("name", cursor.getString(cursor.getColumnIndex("name");item.put("mobilephone", cursor.getString(cursor.getColumnIndex("mobilephone");item.put("
41、;officephone", cursor.getString(cursor.getColumnIndex("officephone");item.put("familyphone", cursor.getString(cursor.getColumnIndex("familyphone");item.put("address", cursor.getString(cursor.getColumnIndex("address");item.put("othercontact&
42、quot;, cursor.getString(cursor.getColumnIndex("othercontact");item.put("email", cursor.getString(cursor.getColumnIndex("email");item.put("position", cursor.getString(cursor.getColumnIndex("position");item.put("company", cursor.getString(cur
43、sor.getColumnIndex("company");item.put("zipcode", cursor.getString(cursor.getColumnIndex("zipcode");item.put("remark", cursor.getString(cursor.getColumnIndex("remark");item.put("imageid", cursor.getInt(cursor.getColumnIndex("imageid&qu
44、ot;);list.add(item);return list;public void modify(User user) ContentValues values = new ContentValues();values.put("name", user.username);values.put("mobilephone", user.mobilePhone);values.put("officephone", user.officePhone);values.put("familyphone", user.fa
45、milyPhone);values.put("address", user.address);values.put("othercontact", user.otherContact);values.put("email",user.email);values.put("position", user.position);values.put("company", pany);values.put("zipcode", user.zipCode);values.put(&qu
46、ot;remark", user.remark);values.put("imageid", user.imageId);dbInstance.update(DB_TABLENAME,values,"_id=?",new StringString.valueOf(user._id);public void delete(int _id) dbInstance.delete(DB_TABLENAME, "_id=?", new StringString.valueOf(_id);public void deleteAll(in
47、t privacy) dbInstance.delete(DB_TABLENAME,"privacy=?",new StringString.valueOf(privacy);public int getTotalCount() Cursor cursor = dbInstance.query(DB_TABLENAME, new String"count(*)", null, null, null, null, null);cursor.moveToNext();return cursor.getInt(0);public ArrayList getUs
48、ers(String condition, boolean privacy) ArrayList list = new ArrayList();String strSelection = ""if(privacy) strSelection = "and privacy = 1" else strSelection = "and privacy = 0"String sql = "select * from " + DB_TABLENAME + " where 1=1 and (name like
49、9;%" + condition + "%' " +"or mobilephone like '%" + condition + "%' or familyphone like '%" + condition + "%' " +"or officephone like '%" + condition + "%')" + strSelection;Cursor cursor = dbInstance.rawQue
50、ry(sql, null);while(cursor.moveToNext() HashMap item = new HashMap();item.put("_id", cursor.getInt(cursor.getColumnIndex("_id");item.put("name", cursor.getString(cursor.getColumnIndex("name");item.put("mobilephone", cursor.getString(cursor.getColumnI
51、ndex("mobilephone");item.put("officephone", cursor.getString(cursor.getColumnIndex("officephone");item.put("familyphone", cursor.getString(cursor.getColumnIndex("familyphone");item.put("address", cursor.getString(cursor.getColumnIndex("
52、;address");item.put("othercontact", cursor.getString(cursor.getColumnIndex("othercontact");item.put("email", cursor.getString(cursor.getColumnIndex("email");item.put("position", cursor.getString(cursor.getColumnIndex("position");item.p
53、ut("company", cursor.getString(cursor.getColumnIndex("company");item.put("zipcode", cursor.getString(cursor.getColumnIndex("zipcode");item.put("remark", cursor.getString(cursor.getColumnIndex("remark");item.put("imageid", cursor.g
54、etInt(cursor.getColumnIndex("imageid");list.add(item);return list;class MyDBHelper extends SQLiteOpenHelper public MyDBHelper(Context context, String name,int version) super(context, name, null, version);Overridepublic void onCreate(SQLiteDatabase db) tableCreate = new StringBuffer();table
55、Create.append("create table ") .append(DB_TABLENAME) .append(" (") .append("_id integer primary key autoincrement,") .append("name text,") .append("mobilephone text,") .append("officephone text,") .append("familyphone text,") .app
56、end("address text,") .append("othercontact text,") .append("email text,") .append("position text,") .append("company text,") .append("zipcode text,") .append("remark text,") .append("imageid int,") .append("privacy
57、int ") .append(")");System.out.println(tableCreate.toString();db.execSQL(tableCreate.toString();Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) String sql = "drop table if exists " + DB_TABLENAME;db.execSQL(sql);myDBHelper.onCreate(db);5.1.2Main函數(shù)主體package com.zhengping.contact;import java.util.ArrayList;import java.util.HashMap;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;impor
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 4年級(jí)上冊(cè)第四單元英語(yǔ)人教點(diǎn)讀
- 混凝土軌枕鉆孔施工方案
- 2025年安徽省中考語(yǔ)文全真模擬試卷(一)
- 2025年蘇州托普信息職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及參考答案1套
- 2025年重慶工業(yè)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試題庫(kù)匯編
- 2025年酒泉職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)1套
- 2025年山東鋁業(yè)職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)1套
- 2024年六年級(jí)品德與社會(huì)上冊(cè) 第一單元 美麗的地球 第3課《“地球村”的居民》教學(xué)實(shí)錄 粵教版
- 7健康看電視 教學(xué)設(shè)計(jì)-2024-2025學(xué)年道德與法治四年級(jí)上冊(cè)統(tǒng)編版
- 三農(nóng)產(chǎn)品質(zhì)量認(rèn)證手冊(cè)
- 口腔頜面外科創(chuàng)口的處理(口腔頜面外科課件)
- 智鼎在線測(cè)評(píng)規(guī)律題題庫(kù)
- 蘋果電腦macOS效率手冊(cè)
- 緊急停車按鈕的安全設(shè)置要求
- 城區(qū)綠地養(yǎng)護(hù)服務(wù)費(fèi)項(xiàng)目成本預(yù)算績(jī)效分析報(bào)告
- 新部編人教版六年級(jí)道德與法治下冊(cè)全冊(cè)全套課件
- 糧油機(jī)械設(shè)備更新項(xiàng)目資金申請(qǐng)報(bào)告-超長(zhǎng)期特別國(guó)債投資專項(xiàng)
- 個(gè)體戶的食品安全管理制度文本
- 部編版道德與法治七年級(jí)下冊(cè)每課教學(xué)反思
- 自考14237《手機(jī)媒體概論》備考試題庫(kù)(含答案)
- 工會(huì)工作制度匯編
評(píng)論
0/150
提交評(píng)論