




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Android平臺(tái)天氣預(yù)報(bào)widget的設(shè)計(jì)與實(shí)現(xiàn)誠(chéng) 信 聲 明我聲明,所呈交的畢業(yè)論文是本人在老師指導(dǎo)下進(jìn)行的研究工作及取得的研究成果。據(jù)我查證,除了文中特別加以標(biāo)注和致謝的地方外,論文中不包含其他人已經(jīng)發(fā)表或撰寫過(guò)的研究成果,也不包含為獲得其他教育機(jī)構(gòu)的學(xué)位或證書而使用過(guò)的材料。我承諾,論文中的所有內(nèi)容均真實(shí)、可信。畢業(yè)論文作者簽名: 簽名日期: 年 月 日Android平臺(tái)天氣預(yù)報(bào)widget的設(shè)計(jì)與實(shí)現(xiàn)摘 要本文對(duì)基于Android平臺(tái)的widget開(kāi)發(fā)技術(shù)進(jìn)行了分析和研究。先簡(jiǎn)要介紹了Android開(kāi)發(fā)必備根底知識(shí),再切入軟件的具體實(shí)現(xiàn)過(guò)程。軟件的實(shí)現(xiàn)是利用網(wǎng)絡(luò)接口和Google A
2、PI獲取網(wǎng)絡(luò)xml文件,然后通過(guò)xml文件解析取得城市天氣預(yù)報(bào)信息。最終使用widget制作方法,利用RemoteViews等技術(shù)完成桌面部件。關(guān)鍵詞: Android;桌面小部件;天氣預(yù)報(bào)the design and implementation of weather forecasting widget on Android platformABSTRACTThis paper analyses and researches the development technique on the Android platform.It first introduce the basic know
3、ledge that is necessary for Android development.And then it introduce the concrete implementation of the software.The software uses network interface and Google API to get xml document.Then it parse the document to get the weather information of the city.Finally I use technique such as RemotViews to
4、 implement the widget.Keywords: Android; widget; weather forecast目 錄TOC o 1-4 h u HYPERLINK l _Toc16066 第1章 緒論 PAGEREF _Toc16066 1 HYPERLINK l _Toc4369 工程背景 PAGEREF _Toc4369 1 HYPERLINK l _Toc20217 研究現(xiàn)狀 PAGEREF _Toc20217 1 HYPERLINK l _Toc14365 論文組織 PAGEREF _Toc14365 2 HYPERLINK l _Toc6109 第2章 Andro
5、id開(kāi)發(fā)環(huán)境 PAGEREF _Toc6109 3 HYPERLINK l _Toc23528 Android開(kāi)發(fā)環(huán)境搭建流程 PAGEREF _Toc23528 3 HYPERLINK l _Toc31697 安裝Eclipse ADT Plugin插件 PAGEREF _Toc31697 3 HYPERLINK l _Toc22057 安裝Android SDK PAGEREF _Toc22057 4 HYPERLINK l _Toc24153 更新Adroid SDK PAGEREF _Toc24153 5 HYPERLINK l _Toc28626 配置Android模擬器 PAGER
6、EF _Toc28626 6 HYPERLINK l _Toc11840 開(kāi)發(fā)工具Eclipse介紹 PAGEREF _Toc11840 7 HYPERLINK l _Toc1943 第3章 Android程序設(shè)計(jì)根底 PAGEREF _Toc1943 9 HYPERLINK l _Toc13848 系統(tǒng)結(jié)構(gòu) PAGEREF _Toc13848 9 HYPERLINK l _Toc20917 應(yīng)用程序 PAGEREF _Toc20917 9 HYPERLINK l _Toc17779 應(yīng)用程序框架 PAGEREF _Toc17779 10 HYPERLINK l _Toc8874 庫(kù)和運(yùn)行環(huán)境
7、 PAGEREF _Toc8874 11 HYPERLINK l _Toc32037 Android應(yīng)用程序組成 PAGEREF _Toc32037 11 HYPERLINK l _Toc1284 Avtivity介紹 PAGEREF _Toc1284 11 HYPERLINK l _Toc7780 Broadcast Intent Receiver介紹 PAGEREF _Toc7780 12 HYPERLINK l _Toc6782 Service介紹 PAGEREF _Toc6782 13 HYPERLINK l _Toc31733 Content Provider介紹 PAGEREF _
8、Toc31733 13 HYPERLINK l _Toc2798 Intent介紹 PAGEREF _Toc2798 14 HYPERLINK l _Toc26067 Android應(yīng)用程序工程文件 PAGEREF _Toc26067 16 HYPERLINK l _Toc6114 第4章 天氣預(yù)報(bào)widget的設(shè)計(jì) PAGEREF _Toc6114 18 HYPERLINK l _Toc27373 網(wǎng)絡(luò)功能實(shí)現(xiàn) PAGEREF _Toc27373 18 HYPERLINK l _Toc25046 標(biāo)準(zhǔn)Java接口 PAGEREF _Toc25046 18 HYPERLINK l _Toc27
9、116 Apache接口 PAGEREF _Toc27116 19 HYPERLINK l _Toc5226 使用Java接口連接網(wǎng)絡(luò) PAGEREF _Toc5226 22 HYPERLINK l _Toc28965 xml解析的實(shí)現(xiàn) PAGEREF _Toc28965 22 HYPERLINK l _Toc6404 制作widget應(yīng)用程序 PAGEREF _Toc6404 26 HYPERLINK l _Toc12068 源文件組織 PAGEREF _Toc12068 28 HYPERLINK l _Toc11199 類之間的協(xié)作 PAGEREF _Toc11199 28 HYPERLI
10、NK l _Toc108 CurrentWeather類的實(shí)現(xiàn) PAGEREF _Toc108 29 HYPERLINK l _Toc19610 edit類的實(shí)現(xiàn) PAGEREF _Toc19610 30 HYPERLINK l _Toc19556 WeatherHandle類的實(shí)現(xiàn) PAGEREF _Toc19556 30 HYPERLINK l _Toc5946 第5章 相關(guān)實(shí)現(xiàn)技術(shù)與體會(huì) PAGEREF _Toc5946 32 HYPERLINK l _Toc12940 添加widget PAGEREF _Toc12940 32 HYPERLINK l _Toc7625 RemoteVi
11、ews的局限 PAGEREF _Toc7625 33 HYPERLINK l _Toc21097 在widget中顯示圖片 PAGEREF _Toc21097 34 HYPERLINK l _Toc1969 在AndroidManifest.xml中進(jìn)行權(quán)限聲明 PAGEREF _Toc1969 34 HYPERLINK l _Toc3023 為widget中的按鈕設(shè)置Onclick事件 PAGEREF _Toc3023 35 HYPERLINK l _Toc31556 利用Bundle實(shí)現(xiàn)消息的傳遞 PAGEREF _Toc31556 36 HYPERLINK l _Toc17003 在Ap
12、pWidgetProvider類中獲取Intent的附加信息 PAGEREF _Toc17003 36 HYPERLINK l _Toc20881 軟件使用 PAGEREF _Toc20881 37 HYPERLINK l _Toc18113 結(jié)論 PAGEREF _Toc18113 40 HYPERLINK l _Toc19957 致謝 PAGEREF _Toc19957 41 HYPERLINK l _Toc22524 參考文獻(xiàn) PAGEREF _Toc22524 42 緒論工程背景2009年1月7日,工業(yè)和信息化部為中國(guó)移動(dòng)、中國(guó)電信和中國(guó)聯(lián)通發(fā)放3張第三代移動(dòng)通信牌照,此舉標(biāo)志著我國(guó)正
13、式進(jìn)入3G時(shí)代。中國(guó)3G正式商用和規(guī)模建網(wǎng),決定了中國(guó)基于Android的應(yīng)用程序開(kāi)發(fā)將會(huì)處于一個(gè)蓬勃開(kāi)展時(shí)期Android是Google于07年11月5日宣布的基于Linux平臺(tái)開(kāi)源 操作系統(tǒng)名稱,號(hào)稱是首個(gè)為移動(dòng)終端打造的真正開(kāi)放和完整的移動(dòng)軟件。 它包括操作系統(tǒng)、用戶界面和應(yīng)用程序 移動(dòng) 工作所需的全部軟件,而且不存在任何以往阻礙移動(dòng)產(chǎn)業(yè)HYPERLINK :/detail.zol /mp3_player_index/subcate19_204_list_1.html創(chuàng)新的專有權(quán)障礙。谷歌與開(kāi)放 聯(lián)盟合作開(kāi)發(fā)了 Android,這個(gè)聯(lián)盟由包括中國(guó)移動(dòng)、摩托羅拉、高通、宏達(dá)和 T-Mobi
14、le 在內(nèi)的 30 多家技術(shù)和無(wú)線應(yīng)用的領(lǐng)軍企業(yè)組成。 Android有如下多個(gè)優(yōu)勢(shì):1、開(kāi)放性2、強(qiáng)大的Google作為傳媒平臺(tái)3、較為成熟的Linux系統(tǒng)4、較強(qiáng)的可移植性和強(qiáng)大的操作性 研究現(xiàn)狀 widget作為桌面上網(wǎng)的新模式,Widget在2007年已形成較大市場(chǎng)規(guī)模,并為廣告商及創(chuàng)業(yè)公司帶來(lái)新的商機(jī)。但是為社交網(wǎng)站開(kāi)發(fā)Widget的軟件開(kāi)發(fā)人員卻表示,Widget的影響力被嚴(yán)重低估。 Android中的Widget是Android 1.5以后參加的一個(gè)特性,允許程序顯示一些常用而又重要的信息在用戶的Home screen(桌面主屏)上。 簡(jiǎn)單的說(shuō)就是有兩個(gè)特點(diǎn): 一是可以添加到Ho
15、me screen上, 二是按照一定的時(shí)間進(jìn)行內(nèi)容更新以上兩點(diǎn)就是由android 系統(tǒng)中的 AppWidget Framework框架 來(lái)支持完成的。 當(dāng)最根本的控件,如Clock和Picture Frame Home Screen ,隨第一款A(yù)ndroid 的發(fā)布后,Android用戶就開(kāi)始嘗試編寫各種應(yīng)用Widget小工具了,隨著Widget API的公開(kāi),為開(kāi)發(fā)人員帶來(lái)了全新有趣的開(kāi)發(fā)模式,除了傳統(tǒng)的 應(yīng)用外,還可以做其它方面的應(yīng)用開(kāi)發(fā)。論文組織 本文主要在介紹Android widget應(yīng)用程序開(kāi)發(fā)的要點(diǎn),以及本人這段時(shí)間學(xué)習(xí)Android開(kāi)發(fā)的體會(huì)。本文在第二章介紹Android開(kāi)
16、發(fā)環(huán)境的搭建,在第三章介紹Andoid開(kāi)發(fā)根底知識(shí),第四章介紹天氣預(yù)報(bào)桌面小程序的設(shè)計(jì)與實(shí)現(xiàn),最后一章介紹在軟件設(shè)計(jì)過(guò)程中遇到的難題和相應(yīng)解決方案。Android開(kāi)發(fā)環(huán)境Android開(kāi)發(fā)環(huán)境搭建流程 Android開(kāi)發(fā)首先需要搭建完整的開(kāi)發(fā)環(huán)境,由于軟件均是基于Dalvik Java Virtual Machine運(yùn)行的所以Google官方推薦使用主流的Java開(kāi)發(fā)IDE Eclipse。我們需要下載必要的開(kāi)發(fā)組件。1)Java運(yùn)行時(shí)庫(kù)(JRE),由于Eclipse使用Java開(kāi)發(fā),所以需要它才可以正常運(yùn)行IDE。2)Eclipse集成開(kāi)發(fā)環(huán)境,官方提供的Android開(kāi)發(fā)插件ADT Plu
17、gin是基于Eclipse編寫的,當(dāng)然用戶可以使用NetBean、JBuilder當(dāng)作代碼編輯器使用,但目前沒(méi)有完整的調(diào)試集成。3)Eclipse ADT Plugin插件是Android Develop Tool Kit的插件,用戶需要安裝它才能在Eclipse中建立和調(diào)試Android程序。4)Android SDK,它包含了完整的Android模擬器 、Android開(kāi)發(fā)文檔和調(diào)試工具,Google官方也會(huì)定時(shí)更新安裝Eclipse ADT Plugin插件首先我們將下載的JRE安裝。運(yùn)行Eclipse開(kāi)發(fā)環(huán)境。安裝Eclipse ADT Plugin,選擇【Help】 【Soft Up
18、dates】 【Find and Install】選擇“Available Software標(biāo)簽頁(yè),點(diǎn)擊【Add Site】按鍵。添加update站點(diǎn): HYPERLINK s:/dl-ssl.google /android/eclipse/ 這時(shí)窗口中新增了“項(xiàng),選中該項(xiàng),點(diǎn)擊【Install】按鍵即可下載。安裝Android SDK將安裝的Android SDK包解壓,運(yùn)行Eclipse。選擇【W(wǎng)indow】 【Preferences】,選擇Android,如下列圖點(diǎn)Browse按鈕選擇SDK解壓后的路徑。為了在DOS控制臺(tái)中直接使用SDK的工具,可以將SDK的目錄添加到Windows的p
19、ath環(huán)境變量中:在桌面上右擊“我的電腦,依次點(diǎn)擊【屬性】【高級(jí)】【環(huán)境變量】。雙擊【系統(tǒng)變量】里面的Path項(xiàng),將Android SDK中tools目錄的完整路徑添加到這里。更新Adroid SDKAndroid SDK的升級(jí)如此之快讓人有點(diǎn)招架不住,為了使用SDK的新特性,有必要將其升級(jí)第一步: 翻開(kāi)Eclipse工具,在工具欄里找到 這個(gè)按鈕,如果你沒(méi)有找到也不要著急,你在菜單欄【W(wǎng)indow】 【Android SDK and AVD Manager】里也能找到這個(gè)按鈕,點(diǎn)擊之彈出如下對(duì)話框: 第二步: 選擇Availabe Package這一標(biāo)簽,然后將出現(xiàn)如下對(duì)話框(記得要勾選那個(gè)
20、復(fù)選框): 然后選擇Installed Packages,點(diǎn)擊Update ALL按鈕即可升級(jí)。配置Android模擬器首先翻開(kāi)Android SDK and AVD Manager,如下圖。2 點(diǎn)擊左邊的Virtual Devices選項(xiàng),在點(diǎn)擊右邊的New.按鈕,來(lái)新建一個(gè)AVD。3 在name標(biāo)簽處填寫AVD的名字,Target標(biāo)簽處選擇api等級(jí),在size標(biāo)簽處填寫要?jiǎng)?chuàng)立的SD卡的大小,在skin標(biāo)簽中設(shè)置模擬器的風(fēng)格,4 到這里,還需要配置模擬器運(yùn)行的AVD,操作步驟:點(diǎn)擊Run,選擇Open Run Dialog菜單命令,翻開(kāi)對(duì)話框,如圖2-33所示。 HYPERLINK :/b
21、ook.51cto /files/uploadimg/20060921/153223104.gif5 雙擊Run 對(duì)話框左邊的導(dǎo)航器中的Android Application菜單命令,創(chuàng)立一個(gè)Android工程運(yùn)行配置。在右邊的Name文本框中輸入 Android工程運(yùn)行配置的名字,在Android選項(xiàng)卡中的Project文本框中輸入要運(yùn)行的Android工程,同樣可以點(diǎn)擊右邊的Browse.按鈕來(lái)選擇Android工程。 開(kāi)發(fā)工具Eclipse介紹Eclipse是一種可擴(kuò)展的開(kāi)放源代碼IDE。2001年11月,IBM公司捐出價(jià)值4,000萬(wàn)美元的源代碼組建了Eclipse聯(lián)盟,并由該聯(lián)盟負(fù)責(zé)
22、這種工具的后續(xù)開(kāi)發(fā)。集成開(kāi)發(fā)環(huán)境(IDE)經(jīng)常將其應(yīng)用范圍限定在“開(kāi)發(fā)、構(gòu)建和調(diào)試的周期之中。為了幫助集成開(kāi)發(fā)環(huán)境(IDE)克服目前的局限性,業(yè)界廠商合作創(chuàng)立了Eclipse平臺(tái)。Eclipse允許在同一IDE中集成來(lái)自不同供給商的工具,并實(shí)現(xiàn)了工具之間的互操作性,從而顯著改變了工程工作流程,使開(kāi)發(fā)者可以專注在實(shí)際的嵌入式目標(biāo)上。 Eclipse框架的這種靈活性來(lái)源于其擴(kuò)展點(diǎn)。它們是在XML中定義的接口,并充當(dāng)插件的耦合點(diǎn)。擴(kuò)展點(diǎn)的范圍包括從用在常規(guī)表述過(guò)濾器中的簡(jiǎn)單字符串,到一個(gè)Java類的描述。任何Eclipse插件定義的擴(kuò)展點(diǎn)都能夠被其它插件使用,反之,任何Eclipse插件也可以遵從其
23、它插件定義的擴(kuò)展點(diǎn)。除了解由擴(kuò)展點(diǎn)定義的接口外,插件不知道它們通過(guò)擴(kuò)展點(diǎn)提供的效勞將如何被使用。 利用Eclipse,我們可以將高級(jí)設(shè)計(jì)(也許是采用UML)與低級(jí)開(kāi)發(fā)工具(如應(yīng)用調(diào)試器等)結(jié)合在一起。如果這些互相補(bǔ)充的獨(dú)立工具采用Eclipse擴(kuò)展點(diǎn)彼此連接,那么當(dāng)我們用調(diào)試器逐一檢查應(yīng)用時(shí),UML對(duì)話框可以突出顯示我們正在關(guān)注的器件。事實(shí)上,由于Eclipse并不了解開(kāi)發(fā)語(yǔ)言,所以無(wú)論Java語(yǔ)言調(diào)試器、C/C+調(diào)試器還是匯編調(diào)試器都是有效的,并可以在相同的框架內(nèi)同時(shí)瞄準(zhǔn)不同的進(jìn)程或節(jié)點(diǎn)。 Eclipse的最大特點(diǎn)是它能接受由Java開(kāi)發(fā)者自己編寫的開(kāi)放源代碼插件,這類似于微軟公司的Visu
24、al Studio和Sun微系統(tǒng)公司的NetBeans平臺(tái)。Eclipse為工具開(kāi)發(fā)商提供了更好的靈活性,使他們能更好地控制自己的軟件技術(shù)。eclipse是一款非常受歡送的java開(kāi)發(fā)工具,使國(guó)內(nèi)的用戶越來(lái)越多,實(shí)際上使用它的java開(kāi)發(fā)人員是最多的。缺點(diǎn)就是較復(fù)雜,對(duì)初學(xué)者來(lái)說(shuō),理解起來(lái)比擬困難。 Android程序設(shè)計(jì)根底系統(tǒng)結(jié)構(gòu) Android作為一個(gè)移動(dòng)設(shè)備開(kāi)發(fā)平臺(tái),其軟件層次結(jié)構(gòu)包括了一個(gè)操作系統(tǒng),中間件和應(yīng)用程序。其框架如下列圖所示其軟件層析結(jié)構(gòu)自上而下可以分為以下幾個(gè)層次:應(yīng)用程序Application;應(yīng)用程序框架Application Framework;各種庫(kù)Librari
25、es和Android運(yùn)行環(huán)境RuntTime;操作系統(tǒng)層OS。 應(yīng)用程序 Android的應(yīng)用程序通常涉及用戶界面和用戶交互,這類程序是用戶實(shí)實(shí)在在感受到的。Android的應(yīng)用程序目前以Java語(yǔ)言編寫。Android本身提供桌面,聯(lián)系人, 和瀏覽器等核心應(yīng)用。同時(shí)應(yīng)用程序開(kāi)發(fā)者可以根據(jù)應(yīng)用程序框架層的API實(shí)現(xiàn)自己的程序,這也是Android開(kāi)源的巨大潛力表達(dá)。Android這種開(kāi)放而強(qiáng)大的平臺(tái)給每一個(gè)程序開(kāi)發(fā)者提供了公平的時(shí)機(jī),每一個(gè)開(kāi)發(fā)者都可以參加移動(dòng)互聯(lián)的世界,共同推動(dòng)移動(dòng)互聯(lián)的開(kāi)展。 應(yīng)用程序框架普通的開(kāi)發(fā)者可以使用Android核心應(yīng)用程序的系統(tǒng)API。Android的應(yīng)用開(kāi)發(fā)框
26、架涉及的非常巧妙,通過(guò)這套應(yīng)用框架,各種組件可以被用戶的應(yīng)用重復(fù)利用,各種效勞也可以被各種應(yīng)用重復(fù)應(yīng)用。開(kāi)發(fā)人員應(yīng)該很好地理解這套框架的工作機(jī)制,這樣才能開(kāi)發(fā)出更好的應(yīng)用程序。下面列舉應(yīng)用框架的主要局部:一組Views。這些UI組件包括列表、文本框、按鈕等。通過(guò)這些UI組件,可以構(gòu)建應(yīng)用程序的試圖局部,這局部也就是用戶能看到的局部。ContentProviders。主要是提供一種機(jī)制,通過(guò)這種機(jī)制,各個(gè)應(yīng)用程序之間可以實(shí)現(xiàn)數(shù)據(jù)的互訪和共享。Resource Manager。它負(fù)責(zé)管理非代碼的訪問(wèn)。如本地圖片資源,設(shè)計(jì)布局的XML文件等的訪問(wèn)。Notification Manager。它能讓程序
27、的將自己的警示信息顯示在狀態(tài)欄上。例如,當(dāng)有短信的時(shí)候,可以在狀態(tài)欄上顯示新短信的信息。Activity Manager。它管理應(yīng)用的生命周期,并且提供給用頁(yè)面退出的機(jī)制。在Android應(yīng)用中,一個(gè)應(yīng)用一般都是多個(gè)頁(yè)面組成,而每個(gè)頁(yè)面的單位就是Activity。庫(kù)和運(yùn)行環(huán)境 Android包括一些C/C+庫(kù),這些庫(kù)能被Android系統(tǒng)的不同組件使用。他們通過(guò)Android應(yīng)用程序框架為開(kāi)發(fā)者提供效勞。Android應(yīng)用程序組成 要進(jìn)行應(yīng)用開(kāi)發(fā),還需要對(duì)Android應(yīng)用構(gòu)造進(jìn)行深入的分析。Android應(yīng)用程序由以下4個(gè)模塊構(gòu)造而成: Activity Broadcast Intent R
28、eceiver Service Content Provider 當(dāng)然,也不是每個(gè)Android應(yīng)用程序都必須由這4局部組成,它可以根據(jù)開(kāi)發(fā)者需求來(lái)進(jìn)行組合 。 在這里還需要介紹Intent的概念和使用方法,他在應(yīng)用程序的運(yùn)行中連接兩個(gè)不同的組件,通過(guò)Intent你的程序可以向Android表達(dá)某種請(qǐng)求或者意愿,Android會(huì)根據(jù)意愿的內(nèi)容選擇適當(dāng)?shù)慕M件來(lái)請(qǐng)求。 Avtivity介紹 Activity是最根本的模塊。我們稱之為活動(dòng),在應(yīng)用程序中,一個(gè)活動(dòng)Activity通常就是一個(gè)單獨(dú)的屏幕。每一個(gè)活動(dòng)都被實(shí)現(xiàn)為一個(gè)獨(dú)立的類,并且從活動(dòng)基類中繼承而來(lái),活動(dòng)類將會(huì)顯示由視圖控件組成的用戶接口,
29、并對(duì)事件作出響應(yīng)。大多數(shù)的應(yīng)用都是由多個(gè)Activity顯示組成,例如,對(duì)一個(gè)文本信息應(yīng)用而言,第一個(gè)屏幕用來(lái)顯示發(fā)送消息的聯(lián)系人列表,第二個(gè)屏幕用來(lái)寫文本消息和選擇收件人,第三個(gè)屏幕查看消息歷史或者消息設(shè)置操作等。 這里的每一個(gè)屏幕就是一個(gè)活動(dòng),很容易實(shí)現(xiàn)從一個(gè)屏幕到一個(gè)新的屏幕,并且完成新的活動(dòng)。當(dāng)一個(gè)新的屏幕翻開(kāi)后,前一個(gè)屏幕將會(huì)暫停,并保存在歷史棧中。用戶可以返回到歷史棧中的前一個(gè)屏幕,當(dāng)屏幕不再使用時(shí),還可以從歷史棧中刪除。 簡(jiǎn)單理解,Activity代表一個(gè)用戶所能看到的屏幕,主要用于處理應(yīng)用程序的整體性工作,例如,監(jiān)聽(tīng)系統(tǒng)事件按鍵事件、觸摸屏事件等,為用戶顯示指定的View,啟動(dòng)
30、其他Activity等。所有應(yīng)用的Activity都繼承于android.app.Activity類,該類是Android提供的基層類,其他的Activity繼承該父類后,通過(guò)父類的方法來(lái)實(shí)現(xiàn)各種功能,這種設(shè)計(jì)在其他領(lǐng)域也較為常見(jiàn)。Broadcast Intent Receiver介紹 可以使用BroadcastReceiver來(lái)讓應(yīng)用對(duì)一個(gè)外部的時(shí)間作出相應(yīng)。例如,當(dāng) 呼入這個(gè)外部時(shí)間到來(lái)的時(shí)候,可以利用BroadcastReceiver進(jìn)行處理。BroadcastReceiver不能生成UI,也就是說(shuō)對(duì)用戶是不透明的,用戶是看不到的。BroadcastReceiver通過(guò)Notificat
31、ionManager來(lái)通知用戶這些事情發(fā)生了。BroadcastReceiver既可以在AndroiManifest.xml中注冊(cè),也可以在運(yùn)行時(shí)的代碼使用Context.registerReceiver()進(jìn)行注冊(cè)。只要是注冊(cè)了,當(dāng)時(shí)間來(lái)臨的時(shí)候,即使程序沒(méi)有啟動(dòng),系統(tǒng)也在需要的時(shí)候啟動(dòng)程序。各種應(yīng)用程序還可以通過(guò)Context.sendBroadcast()將他們自己的intent broadcasts播送給其他應(yīng)用程序。Service介紹 Service即效勞的意思,既然是效勞,那么Service將是一個(gè)生命周期長(zhǎng)而且沒(méi)有用戶界面的程序。比方一個(gè)正在從播放列表中播放歌曲的媒體播放器,在這
32、個(gè)媒體播放器應(yīng)用中,應(yīng)該會(huì)有多個(gè)activity,讓使用者可以選擇歌曲并播放歌曲。然而,音樂(lè)重放這個(gè)功能并沒(méi)有對(duì)應(yīng)的activity,因?yàn)槭褂谜邥?huì)認(rèn)為在導(dǎo)航到其他屏幕時(shí)音樂(lè)應(yīng)該還在播放。在這個(gè)例子中,媒體播放器這個(gè)activity會(huì)使用Context.startService()來(lái)啟動(dòng)一個(gè)service,從而可以在后臺(tái)保持音樂(lè)的播放。同時(shí),系統(tǒng)也將保持這個(gè)service一直執(zhí)行,直到這個(gè)service運(yùn)行結(jié)束。另外,我們還可以通過(guò)使用Context.bindService()方法連接到一個(gè)service上如果這個(gè)service當(dāng)前還沒(méi)有處于啟動(dòng)狀態(tài),那么將啟動(dòng)它。當(dāng)連接到一個(gè)service之后
33、,還可用service提供的接口與它進(jìn)行通訊。以媒體播放器為例,我們還可以執(zhí)行暫停、重播等操作。 Content Provider介紹 Android這個(gè)系統(tǒng)和其他的操作系統(tǒng)還不太一樣,我們需要記住的是,數(shù)據(jù)在Android當(dāng)中是私有的,當(dāng)然這些數(shù)據(jù)包括文件數(shù)據(jù)和數(shù)據(jù)庫(kù)數(shù)據(jù),以及一些其他類型的數(shù)據(jù)。一個(gè)ContentProvider類實(shí)現(xiàn)了一組標(biāo)準(zhǔn)的方法接口,從而能夠讓其他的應(yīng)用保存或讀取此ContentProvider的各種數(shù)據(jù)類型,也就是說(shuō),一個(gè)程序可以通過(guò)實(shí)現(xiàn)一個(gè)ContentProvider的抽象接口將自己的數(shù)據(jù)暴露出去。外界根本看不到,也不用看到這個(gè)應(yīng)用暴露的數(shù)據(jù)在應(yīng)用當(dāng)中是如何存儲(chǔ)
34、的,即用數(shù)據(jù)庫(kù)存儲(chǔ)還是文件存儲(chǔ),還是通過(guò)網(wǎng)上獲得,這一切都不重要,重要的是外界可以通過(guò)這一套標(biāo)準(zhǔn)而統(tǒng)一的接口和程序里面的數(shù)據(jù)打交道??梢宰x取程序數(shù)據(jù),也可以刪除程序的數(shù)據(jù),當(dāng)然中間會(huì)涉及一些權(quán)限問(wèn)題。Intent介紹 Intent是一種運(yùn)行時(shí)綁定runtime binding機(jī)制,它能在程序運(yùn)行的過(guò)程中連接兩個(gè)不同的組件。通過(guò)Intent,你的程序可以向Android表達(dá)某種請(qǐng)求或者意愿,Android會(huì)根據(jù)意愿的內(nèi)容選擇適當(dāng)?shù)慕M件來(lái)請(qǐng)求。比方,有一個(gè)Activity希望翻開(kāi)網(wǎng)頁(yè)瀏覽器查看某一網(wǎng)頁(yè)的內(nèi)容,那么這個(gè)Activity只需要發(fā)出WEB_SEARCH_ACTION請(qǐng)求給Android,
35、Android會(huì)根據(jù)Intent的請(qǐng)求內(nèi)容,查詢各組件注冊(cè)時(shí)聲明的IntentFilter,找到網(wǎng)頁(yè)瀏覽器Activity來(lái)瀏覽網(wǎng)頁(yè)。 Android的三個(gè)根本組件Activity,Service和BroadcastReceiver,它們都是通過(guò)Intent機(jī)制激活的,而不同類型的組件有傳遞Intent的不同方式。要激活一個(gè)新的Activity,或者讓一個(gè)現(xiàn)有的Activity執(zhí)行新的操作,可以通過(guò)調(diào)用Context.startActivity()或者Activity.startActivityForResult()方法。這兩個(gè)方法需要傳入的Intent參數(shù)也稱為Activity Action
36、 Intent活動(dòng)行為意圖,根據(jù)Intent對(duì)象對(duì)目標(biāo)Activity描述的不同,來(lái)啟動(dòng)與之相匹配的Activity或傳遞信息。(2) 要啟動(dòng)一個(gè)新的效勞,或者向一個(gè)已有的效勞傳遞新的指令,調(diào)用Context.startService()方法或調(diào)用Context.bindService()方法將調(diào)用此方法的上下文對(duì)象與Service綁定。(3) 通過(guò)Context.sendBroadcast()、Context.sendOrderBroadcast()和Context.send-StickBroadcast()這三個(gè)方法可以發(fā)送BroadcastIntent。BroadcastIntent發(fā)送
37、后,所有已注冊(cè)的擁有與之相匹配IntentFilter的BroadcastReceiver就會(huì)被激活。這種機(jī)制被廣泛運(yùn)用于設(shè)備或系統(tǒng)狀態(tài)變化的通知,一個(gè)常見(jiàn)的例子是,當(dāng)Android的電池電量過(guò)低時(shí),系統(tǒng)會(huì)發(fā)送Action為BATTERY_LOW的播送,接著任何可匹配該Action的IntentFilter注冊(cè)的BroadcastReceiver都會(huì)各自運(yùn)行自定義的處理代碼,比方關(guān)閉設(shè)備的WIFI和GPS以節(jié)省電池消耗。 Intent一旦發(fā)出,Android都會(huì)準(zhǔn)確找到相匹配的一個(gè)或多個(gè)Activity、Service或Broadcast-Receiver作為響應(yīng)。所以,不同類型的Intent
38、消息不會(huì)出現(xiàn)重疊:BroadcastIntent消息只會(huì)發(fā)送給BroadcastReceiver,而絕不可能發(fā)送給Activity或Service。由startActivity()傳遞的消息也只可能發(fā)送給Activity,由startService()傳遞的Intent只可能發(fā)送給Service。 Intent對(duì)象抽象地描述了要執(zhí)行的操作,其描述的根本內(nèi)容可以分為組件名稱、Action動(dòng)作、Data數(shù)據(jù)、Category類別、Extra附加信息和Flag標(biāo)志位6局部 Intent分為顯式Intent和隱式Intent : 對(duì)于明確指出了目標(biāo)組件名稱的Intent,我們稱之為“顯式Intent。
39、對(duì)于沒(méi)有明確指出目標(biāo)組件名稱的Intent,那么稱之為“隱式Intent。Android系統(tǒng)使用IntentFilter 來(lái)尋找與隱式Intent相關(guān)的對(duì)象。 顯式Intent直接用組件的名稱定義目標(biāo)組件,這種方式很直接。但是由于開(kāi)發(fā)人員往往并不清楚別的應(yīng)用程序的組件名稱,因此,顯式Intent更多用于在應(yīng)用程序內(nèi)部傳遞消息。比方在某應(yīng)用程序內(nèi),一個(gè)Activity啟動(dòng)一個(gè)Service。隱式Intent恰恰相反,它不會(huì)用組件名稱定義需要激活的目標(biāo)組件,它更廣泛地用于在不同應(yīng)用程序之間傳遞消息。Android應(yīng)用程序工程文件 典型的工程文件如下列圖所示: 與一般的Java工程一樣,src文件夾
40、是工程的所有包及源文件.java,res文件夾中那么包含了工程中的所有資源,比方:程序圖標(biāo)drawable、布局文件layout、常量values等。下面來(lái)介紹其他Java工程中沒(méi)有的gen文件夾中的R.java文件和每個(gè)Android工程都必須有的AndroidManfest.xml文件。 R.java是在建立工程時(shí)自動(dòng)生成的,這個(gè)文件是只讀模式,不能更改,R.java文件是定義該工程所有資源的索引文件。 AndroidManfest.xml文件那么包含了該工程中所使用的Activity、Service、Receiver。相當(dāng)于應(yīng)用的配置文件,在應(yīng)用中是一個(gè)相當(dāng)重要的文件。天氣預(yù)報(bào)widge
41、t的設(shè)計(jì)網(wǎng)絡(luò)功能實(shí)現(xiàn) Android可以使用以下兩種網(wǎng)絡(luò)接口標(biāo)準(zhǔn)Java接口 .*下面提供了訪問(wèn) 效勞的根本功能。使用這局部接口的根本操作主要包括:創(chuàng)立 URL 以及 URLConnection / URLConnection 對(duì)象設(shè)置連接參數(shù)連接到效勞器向效勞器寫數(shù)據(jù)從效勞器讀取數(shù)據(jù)import java.io.InputStream; import java.io.OutputStream; import .URL; import .URLConnection; import . URLConnection; try / 創(chuàng)立一個(gè) URL 對(duì)象 URL url = new URL(your
42、_url); / 創(chuàng)立一個(gè) URL 連接,如果有代理的話可以指定一個(gè)代理。 URLConnection connection = url.openConnection(Proxy_yours); / 對(duì)于 連接可以直接轉(zhuǎn)換成 URLConnection, / 這樣就可以使用一些 連接特定的方法,如 setRequestMethod() 等 / URLConnection connection = ( URLConnection)url.openConnection(Proxy_yours); / 在開(kāi)始和效勞器連接之前,可能需要設(shè)置一些網(wǎng)絡(luò)參數(shù) connection.setConnectTim
43、eout(10000); connection.addRequestProperty(User-Agent, J2me/MIDP2.0); / 連接到效勞器 connection.connect(); / 往效勞器寫數(shù)據(jù),數(shù)據(jù)會(huì)暫時(shí)被放到內(nèi)存緩存區(qū)中 / 如果僅是一個(gè)簡(jiǎn)單的 GET,這一局部那么可以省略 OutputStream outStream = connection.getOutputStream(); ObjectOutputStream objOutput = new ObjectOutputStream(outStream); objOutput.writeObject(new
44、String(this is a string.); objOutput.flush(); / 向效勞器發(fā)送數(shù)據(jù)并獲取應(yīng)答 InputStream in = connection.getInputStream(); / 處理數(shù)據(jù) . catch (Exception e) / 網(wǎng)絡(luò)讀寫操作往往會(huì)產(chǎn)生一些異常,所以在具體編寫網(wǎng)絡(luò)應(yīng)時(shí) / 最好捕捉每一個(gè)具體以采取相應(yīng)措施 Apache接口 Apache Client 是一個(gè)開(kāi)源工程,彌補(bǔ)了 .* 靈活性缺乏的缺點(diǎn),為客戶端的 編程提供高效、最新、功能豐富的工具包支持。Android 平臺(tái)引入了 Apache Client 的同時(shí)還提供了對(duì)它的一些
45、封裝和擴(kuò)展,例如設(shè)置缺省的 超時(shí)和緩存大小等。早期的 Android 曾同時(shí)包括 Commons Client org.apache mons. client.* 和 Components org.apache. .client.* ,不過(guò)當(dāng)前版本 (1.5) 中開(kāi)發(fā)者只能使用后者,也就是說(shuō)類似以下的一些類:使用這局部接口的根本操作與 .* 根本類似,主要包括:創(chuàng)立 Client 以及 GetMethod / PostMethod, Request 等對(duì)象設(shè)置連接參數(shù)執(zhí)行 操作處理效勞器返回結(jié)果import org.apache. . Entity; import org.apache. .
46、Host; import org.apache. . Response; import org.apache. .auth.AuthScope; import org.apache. .auth.UsernamePasswordCredentials; import org.apache. .client.methods. Get; import org.apache. .conn.params.ConnRoutePNames; import org.apache. .params. ConnectionParams; import org.apache. .client.params. Cl
47、ientParams; try / 創(chuàng)立 Params 以用來(lái)設(shè)置 參數(shù)這一局部不是必需的 Params params = new Basic Params(); / 設(shè)置連接超時(shí)和 Socket 超時(shí),以及 Socket 緩存大小 ConnectionParams.setConnectionTimeout(params, 20 * 1000); ConnectionParams.setSoTimeout(params, 20 * 1000); ConnectionParams.setSocketBufferSize(params, 8192); / 設(shè)置重定向,缺省為 true Client
48、Params.setRedirecting(params, true); / 設(shè)置 user agent ProtocolParams.setUserAgent(params, userAgent); / 創(chuàng)立一個(gè) Client 實(shí)例 / 注意 Client Client = new Client(); 是Commons Client / 中的用法,在 Android 1.5 中我們需要使用 Apache 的缺省實(shí)現(xiàn) Default Client Client Client = new Default Client(params); / 創(chuàng)立 Get 方法,該方法會(huì)自動(dòng)處理 URL 地址的重定
49、向 Get Get = new Get ( :/ test_test /); Response response = client.execute( Get); if (response.getStatusLine().getStatusCode() != Status.SC_OK) / 錯(cuò)誤處理,例如可以在該請(qǐng)求正常結(jié)束前將其中斷 Get.abort(); / 讀取更多信息 Header headers = response.getHeaders(); Entity entity = response.getEntity(); Header header = response.getFirs
50、tHeader(Content-Type); catch (Exception ee) / finally / 釋放連接 client.getConnectionManager().shutdown(); 使用Java接口連接網(wǎng)絡(luò) 本設(shè)計(jì)使用Java接口從網(wǎng)絡(luò)獲取信息。 在Android應(yīng)用中,要使用網(wǎng)絡(luò)必須先在AndroidManifest.xml注冊(cè)使用網(wǎng)絡(luò)功能。其xml語(yǔ)句為 我是利用Google提供的Web Service來(lái)完成從網(wǎng)絡(luò)獲取天氣信息任務(wù)的。 首先需要一個(gè)URL類表示我們要獲取內(nèi)容的網(wǎng)址 String aStrring= : /google /ig/api?weather=
51、+city; URL aURL=new URL(aString.replace( ,%20); 通過(guò)openStream()方法獲取xml信息,將其作為一個(gè)參數(shù)傳給xml解析器進(jìn)行xml解析。xml解析的實(shí)現(xiàn) 我是通過(guò)利用SAX來(lái)實(shí)現(xiàn)xml的解析的。 用SAX解析xml,我們需要一個(gè)SAXParser對(duì)象。 SAXParserFactory spf=SAXParseFactory.newInstance(); SAXParser sp=spf.newSAXParser(); 有了SAXParser實(shí)例,接下來(lái)要想方法讀入xml文件。org.xml.sax.XMLReader為我們提供了這樣一個(gè)
52、借口,它的方法setContentHandler允許我們?cè)谧x入xml之前注冊(cè)一系列處理器。 /*從SAXParser獲取XMLReader*/ XMLReader xr=sp.getXMLReader(); /*創(chuàng)立我們自己的內(nèi)容處理器*/ ExampleHandler myHander=new ExampleHandler(); /*用內(nèi)容處理器處理XMLReader*/ xr.setContentHandler(myHandler); 設(shè)置好內(nèi)容處理器之后,就可以開(kāi)始使用XMLReader讀取xml內(nèi)容,并通過(guò)myHandler對(duì)象返回從xml中獲得的數(shù)據(jù). /*XMLReader獲取xm
53、l文件并進(jìn)行解析*/ xr.pars(new InputSource(aURL.openStream(); XMLReader會(huì)便利讀取xml文件中的所有內(nèi)容,在讀取過(guò)程中,事先注冊(cè)好的xml內(nèi)容處理器就會(huì)被依次觸發(fā)。 要實(shí)現(xiàn)xml內(nèi)容處理器,需要繼承類org.xml.sax.helpers.DefaultHandler,它提供了startDocument(),endDocument(),startElement(),endElement(),Charators()等方法。繼承DefaultHandler之后需要重寫這些方法,一邊有效的處理xml內(nèi)容,其中各個(gè)方法被調(diào)用的情況如下: 在xml文
54、件開(kāi)始的地方會(huì)調(diào)用starDocument()方法,在文件結(jié)束的地方會(huì)調(diào)用endDocument()方法。 Xml中的節(jié)點(diǎn)總是以.的方式組織起來(lái)的,因此當(dāng)SAXParser解析到xml開(kāi)頭的tag時(shí),starElement就會(huì)被調(diào)用。而當(dāng)SAXParser解析到xml結(jié)尾的tag時(shí),endElement就會(huì)被調(diào)用。 在xml文件中,我們常常在開(kāi)始tag和結(jié)束tag之間放入數(shù)據(jù),當(dāng)SAXParser解析到中間數(shù)據(jù)時(shí),方法charactors()就會(huì)被調(diào)用。 下面是我根據(jù)Google API返回的xml格式重寫后的兩個(gè)方法,startElement()和endElement()。public vo
55、id startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException / Outer Tags if (localName.equals(forecast_information) this.in_forecast_information = true; else if (localName.equals(current_conditions) this.in_current_conditions = true; else if (localName.e
56、quals(forecast_conditions) this.in_forecast_conditions = true; else String dataAttribute = atts.getValue(data); / Inner Tags of if (localName.equals(city) else if (localName.equals(postal_code) else if (localName.equals(latitude_e6) else if (localName.equals(longitude_e6) else if (localName.equals(f
57、orecast_date) else if (localName.equals(current_date_time) else if (localName.equals(unit_system) if (dataAttribute.equals(SI) this.usingSITemperature = true; / SHARED(!) Inner Tags within AND / else if (localName.equals(day_of_week) if (this.in_current_conditions) else if (this.in_forecast_conditio
58、ns) else if (localName.equals(icon) if (this.in_current_conditions) this.setIconURL(dataAttribute); else if (this.in_forecast_conditions) else if (localName.equals(condition) if (this.in_current_conditions) this.setCurrentCondition(dataAttribute); else if (this.in_forecast_conditions) / Inner Tags w
59、ithin else if (localName.equals(temp_f) else if (localName.equals(temp_c) this.setCurrentTemp(Integer.parseInt(dataAttribute); else if (localName.equals(humidity) this.setCurrentHum(dataAttribute); else if (localName.equals(wind_condition) /可擴(kuò)展 / Inner Tags within else if (localName.equals(low) int
60、temp = Integer.parseInt(dataAttribute); if (this.usingSITemperature) /可擴(kuò)展 else /可擴(kuò)展 else if (localName.equals(high) /int temp = Integer.parseInt(dataAttribute); if (this.usingSITemperature) /可擴(kuò)展 else /可擴(kuò)展 Override public void endElement(String namespaceURI, String localName, String qName) throws SAX
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年酸奶行業(yè)分析研究報(bào)告
- 合同范本 交貨期
- 臨翔區(qū)糧油購(gòu)銷合同范例
- 2025年人力資源管理教案深度剖析
- 合伙做工地合同范本
- 中標(biāo)后工程合同范本
- 合作合同范本落款
- 口罩訂購(gòu)合同范本
- 合同范本拍照有效
- 合作購(gòu)房協(xié)議合同范本
- 大家排好隊(duì)說(shuō)課
- 鐵氧體永磁材料
- 湘教版初中數(shù)學(xué)教材目錄
- 2023年新改版教科版四年級(jí)下冊(cè)科學(xué)精編練習(xí)題(含單元+期中+期末測(cè)試卷)
- 金蝶云星辰初級(jí)考試題庫(kù)
- GM/T 0107-2021智能IC卡密鑰管理系統(tǒng)基本技術(shù)要求
- GB/T 6967-2009工程結(jié)構(gòu)用中、高強(qiáng)度不銹鋼鑄件
- 部編版七年級(jí)下冊(cè)語(yǔ)文第一單元課件
- 2023年山東省青島市統(tǒng)招專升本管理學(xué)自考真題(含答案)
- 文化產(chǎn)業(yè)政策與法規(guī)課件
- 人教版八年級(jí)下冊(cè)生物全冊(cè)教案完整版教學(xué)設(shè)計(jì)含教學(xué)反思
評(píng)論
0/150
提交評(píng)論