Android平臺天氣預(yù)報(bào)widget的設(shè)計(jì)與實(shí)現(xiàn)論文_第1頁
Android平臺天氣預(yù)報(bào)widget的設(shè)計(jì)與實(shí)現(xiàn)論文_第2頁
Android平臺天氣預(yù)報(bào)widget的設(shè)計(jì)與實(shí)現(xiàn)論文_第3頁
Android平臺天氣預(yù)報(bào)widget的設(shè)計(jì)與實(shí)現(xiàn)論文_第4頁
Android平臺天氣預(yù)報(bào)widget的設(shè)計(jì)與實(shí)現(xiàn)論文_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Android平臺天氣預(yù)報(bào)widget的設(shè)計(jì)與實(shí)現(xiàn)論文 Android平臺天氣預(yù)報(bào)widget的設(shè)計(jì)與實(shí)現(xiàn)摘 要本文對基于Android平臺的widget開發(fā)技術(shù)進(jìn)行了分析和研究。先簡要介紹了Android開發(fā)必備根底知識,再切入軟件的具體實(shí)現(xiàn)過程。軟件的實(shí)現(xiàn)是利用網(wǎng)絡(luò)接口和Google API獲取網(wǎng)絡(luò)xml文件,然后通過xml文件解析取得城市天氣預(yù)報(bào)信息。最終使用widget制作方法,利用RemoteViews等技術(shù)完成桌面部件。關(guān)鍵詞: Android;桌面小部件;天氣預(yù)報(bào)the design and implementation of weather forecasting widget

2、 on Android platformABSTRACTThis paper analyses and researches the development technique on the Android platform.It first introduce the basic knowledge that is necessary for Android development.And then it introduce the concrete implementation of the software.The software uses network interface and

3、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 implement the widget.Keywords: Android; widget; weather forecast目 錄第1章 緒論11.1 工程背景11.2 研究現(xiàn)狀11.3 論文組織2第2章 Android開發(fā)環(huán)境32.1 Android開發(fā)環(huán)境搭建流程32.1.1 安裝Eclipse

4、ADT Plugin插件32.1.2 安裝Android SDK42.1.3 更新Adroid SDK52.1.4 配置Android模擬器62.2 開發(fā)工具Eclipse介紹7第3章 Android程序設(shè)計(jì)根底93.1 系統(tǒng)結(jié)構(gòu)93.1.1 應(yīng)用程序93.1.2 應(yīng)用程序框架103.1.3 庫和運(yùn)行環(huán)境113.2 Android應(yīng)用程序組成113.2.1 Avtivity介紹113.2.2 Broadcast Intent Receiver介紹123.2.3 Service介紹133.2.4 Content Provider介紹133.2.5 Intent介紹143.3 Android應(yīng)用程

5、序工程文件16第4章 天氣預(yù)報(bào)widget的設(shè)計(jì)184.1 網(wǎng)絡(luò)功能實(shí)現(xiàn)184.1.1 標(biāo)準(zhǔn)Java接口184.1.2 Apache接口194.1.3 使用Java接口連接網(wǎng)絡(luò)224.2 xml解析的實(shí)現(xiàn)224.3 制作widget應(yīng)用程序264.3.1 源文件組織284.3.2 類之間的協(xié)作284.3.3 CurrentWeather類的實(shí)現(xiàn)294.3.4 edit類的實(shí)現(xiàn)304.3.5 WeatherHandle類的實(shí)現(xiàn)30第5章 相關(guān)實(shí)現(xiàn)技術(shù)與體會325.1 添加widget325.2 RemoteViews的局限335.3 在widget中顯示圖片345.4 在AndroidManif

6、est.xml中進(jìn)行權(quán)限聲明345.5 為widget中的按鈕設(shè)置Onclick事件355.6 利用Bundle實(shí)現(xiàn)消息的傳遞365.7 在AppWidgetProvider類中獲取Intent的附加信息365.8 軟件使用37結(jié)論40致謝41參考文獻(xiàn)42 緒論工程背景2021年1月7日,工業(yè)和信息化部為中國移動(dòng)、中國電信和中國聯(lián)通發(fā)放3張第三代移動(dòng)通信牌照,此舉標(biāo)志著我國正式進(jìn)入3G時(shí)代。中國3G正式商用和規(guī)模建網(wǎng),決定了中國基于Android的應(yīng)用程序開發(fā)將會處于一個(gè)蓬勃開展時(shí)期Android是Google于07年11月5日宣布的基于Linux平臺開源 操作系統(tǒng)名稱,號稱是首個(gè)為移動(dòng)終端打

7、造的真正開放和完整的移動(dòng)軟件。 它包括操作系統(tǒng)、用戶界面和應(yīng)用程序 移動(dòng) 工作所需的全部軟件,而且不存在任何以往阻礙移動(dòng)產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙。谷歌與開放 聯(lián)盟合作開發(fā)了 Android,這個(gè)聯(lián)盟由包括中國移動(dòng)、摩托羅拉、高通、宏達(dá)和 T-Mobile 在內(nèi)的 30 多家技術(shù)和無線應(yīng)用的領(lǐng)軍企業(yè)組成。 Android有如下多個(gè)優(yōu)勢:1、開放性2、強(qiáng)大的Google作為傳媒平臺3、較為成熟的Linux系統(tǒng)4、較強(qiáng)的可移植性和強(qiáng)大的操作性 研究現(xiàn)狀 widget作為桌面上網(wǎng)的新模式,Widget在2007年已形成較大市場規(guī)模,并為廣告商及創(chuàng)業(yè)公司帶來新的商機(jī)。但是為社交網(wǎng)站開發(fā)Widget的軟件開發(fā)

8、人員卻表示,Widget的影響力被嚴(yán)重低估。 Android中的Widget是Android 1.5以后參加的一個(gè)特性,允許程序顯示一些常用而又重要的信息在用戶的Home screen 桌面主屏 上。 簡單的說就是有兩個(gè)特點(diǎn): 一是可以添加到Home screen上, 二是按照一定的時(shí)間進(jìn)行內(nèi)容更新以上兩點(diǎn)就是由android 系統(tǒng)中的 AppWidget Framework框架 來支持完成的。 當(dāng)最根本的控件,如Clock和Picture Frame Home Screen ,隨第一款A(yù)ndroid 的發(fā)布后,Android用戶就開始嘗試編寫各種應(yīng)用Widget小工具了,隨著Widget A

9、PI的公開,為開發(fā)人員帶來了全新有趣的開發(fā)模式,除了傳統(tǒng)的 應(yīng)用外,還可以做其它方面的應(yīng)用開發(fā)。論文組織 本文主要在介紹Android widget應(yīng)用程序開發(fā)的要點(diǎn),以及本人這段時(shí)間學(xué)習(xí)Android開發(fā)的體會。本文在第二章介紹Android開發(fā)環(huán)境的搭建,在第三章介紹Andoid開發(fā)根底知識,第四章介紹天氣預(yù)報(bào)桌面小程序的設(shè)計(jì)與實(shí)現(xiàn),最后一章介紹在軟件設(shè)計(jì)過程中遇到的難題和相應(yīng)解決方案。Android開發(fā)環(huán)境Android開發(fā)環(huán)境搭建流程 Android開發(fā)首先需要搭建完整的開發(fā)環(huán)境,由于軟件均是基于Dalvik Java Virtual Machine運(yùn)行的所以Google官方推薦使用主

10、流的Java開發(fā)IDE Eclipse。我們需要下載必要的開發(fā)組件。1 Java運(yùn)行時(shí)庫 JRE ,由于Eclipse使用Java開發(fā),所以需要它才可以正常運(yùn)行IDE。2 Eclipse集成開發(fā)環(huán)境,官方提供的Android開發(fā)插件ADT Plugin是基于Eclipse編寫的,當(dāng)然用戶可以使用NetBean、JBuilder當(dāng)作代碼編輯器使用,但目前沒有完整的調(diào)試集成。3 Eclipse ADT Plugin插件是Android Develop Tool Kit的插件,用戶需要安裝它才能在Eclipse中建立和調(diào)試Android程序。4 Android SDK,它包含了完整的Android模

11、擬器 、Android開發(fā)文檔和調(diào)試工具,Google官方也會定時(shí)更新安裝Eclipse ADT Plugin插件首先我們將下載的JRE安裝。運(yùn)行Eclipse開發(fā)環(huán)境。安裝Eclipse ADT Plugin,選擇【Help】 【Soft Updates】 【Find and Install】選擇“Available Software標(biāo)簽頁,點(diǎn)擊【Add Site】按鍵。添加update站點(diǎn): 這時(shí)窗口中新增了“ 安裝Android SDK將安裝的Android SDK包解壓,運(yùn)行Eclipse。選擇【W(wǎng)indow】 【Preferences】,選擇Android,如以下圖點(diǎn)Browse按鈕

12、選擇SDK解壓后的路徑。為了在DOS控制臺中直接使用SDK的工具,可以將SDK的目錄添加到Windows的path環(huán)境變量中:在桌面上右擊“我的電腦,依次點(diǎn)擊【屬性】 【高級】 【環(huán)境變量】。雙擊【系統(tǒng)變量】里面的Path項(xiàng),將Android SDK中tools目錄的完整路徑添加到這里。更新Adroid SDKAndroid SDK的升級如此之快讓人有點(diǎn)招架不住,為了使用SDK的新特性,有必要將其升級第一步: 翻開Eclipse工具,在工具欄里找到 這個(gè)按鈕,如果你沒有找到也不要著急,你在菜單欄【W(wǎng)indow】 【Android SDK and AVD Manager】里也能找到這個(gè)按鈕,點(diǎn)擊

13、之彈出如下對話框: 第二步: 選擇Availabe Package這一標(biāo)簽,然后將出現(xiàn)如下對話框 記得要勾選那個(gè)復(fù)選框 : 然后選擇Installed Packages,點(diǎn)擊Update ALL按鈕即可升級。配置Android模擬器首先翻開"Android SDK and AVD Manager",如以下圖。2 點(diǎn)擊左邊的"Virtual Devices"選項(xiàng),在點(diǎn)擊右邊的"New."按鈕,來新建一個(gè)AVD。3 在"name"標(biāo)簽處填寫AVD的名字,"Target"標(biāo)簽處選擇api等級,在&qu

14、ot;size"標(biāo)簽處填寫要?jiǎng)?chuàng)立的SD卡的大小,在"skin"標(biāo)簽中設(shè)置模擬器的風(fēng)格,4 到這里,還需要配置模擬器運(yùn)行的AVD,操作步驟:點(diǎn)擊"Run",選擇"Open Run Dialog"菜單命令,翻開對話框,如圖2-33所示。 5 雙擊"Run "對話框左邊的導(dǎo)航器中的"Android Application"菜單命令,創(chuàng)立一個(gè)Android工程運(yùn)行配置。在右邊的"Name"文本框中輸入 Android工程運(yùn)行配置的名字,在"Android"

15、;選項(xiàng)卡中的"Project"文本框中輸入要運(yùn)行的Android工程,同樣可以點(diǎn)擊右邊的"Browse."按鈕來選擇Android工程。 開發(fā)工具Eclipse介紹Eclipse是一種可擴(kuò)展的開放源代碼IDE。2001年11月,IBM公司捐出價(jià)值4,000萬美元的源代碼組建了Eclipse聯(lián)盟,并由該聯(lián)盟負(fù)責(zé)這種工具的后續(xù)開發(fā)。集成開發(fā)環(huán)境 IDE 經(jīng)常將其應(yīng)用范圍限定在“開發(fā)、構(gòu)建和調(diào)試的周期之中。為了幫助集成開發(fā)環(huán)境 IDE 克服目前的局限性,業(yè)界廠商合作創(chuàng)立了Eclipse平臺。Eclipse允許在同一IDE中集成來自不同供應(yīng)商的工具,并實(shí)現(xiàn)了工具

16、之間的互操作性,從而顯著改變了工程工作流程,使開發(fā)者可以專注在實(shí)際的嵌入式目標(biāo)上。 Eclipse框架的這種靈活性來源于其擴(kuò)展點(diǎn)。它們是在XML中定義的接口,并充當(dāng)插件的耦合點(diǎn)。擴(kuò)展點(diǎn)的范圍包括從用在常規(guī)表述過濾器中的簡單字符串,到一個(gè)Java類的描述。任何Eclipse插件定義的擴(kuò)展點(diǎn)都能夠被其它插件使用,反之,任何Eclipse插件也可以遵從其它插件定義的擴(kuò)展點(diǎn)。除了解由擴(kuò)展點(diǎn)定義的接口外,插件不知道它們通過擴(kuò)展點(diǎn)提供的效勞將如何被使用。 利用Eclipse,我們可以將高級設(shè)計(jì) 也許是采用UML 與低級開發(fā)工具 如應(yīng)用調(diào)試器等 結(jié)合在一起。如果這些互相補(bǔ)充的獨(dú)立工具采用Eclipse擴(kuò)展點(diǎn)

17、彼此連接,那么當(dāng)我們用調(diào)試器逐一檢查應(yīng)用時(shí),UML對話框可以突出顯示我們正在關(guān)注的器件。事實(shí)上,由于Eclipse并不了解開發(fā)語言,所以無論Java語言調(diào)試器、C/C+調(diào)試器還是匯編調(diào)試器都是有效的,并可以在相同的框架內(nèi)同時(shí)瞄準(zhǔn)不同的進(jìn)程或節(jié)點(diǎn)。 Eclipse的最大特點(diǎn)是它能接受由Java開發(fā)者自己編寫的開放源代碼插件,這類似于微軟公司的Visual Studio和Sun微系統(tǒng)公司的NetBeans平臺。Eclipse為工具開發(fā)商提供了更好的靈活性,使他們能更好地控制自己的軟件技術(shù)。eclipse是一款非常受歡迎的java開發(fā)工具,使國內(nèi)的用戶越來越多,實(shí)際上使用它的java開發(fā)人員是最多的

18、。缺點(diǎn)就是較復(fù)雜,對初學(xué)者來說,理解起來比較困難。 Android程序設(shè)計(jì)根底系統(tǒng)結(jié)構(gòu) Android作為一個(gè)移動(dòng)設(shè)備開發(fā)平臺,其軟件層次結(jié)構(gòu)包括了一個(gè)操作系統(tǒng),中間件和應(yīng)用程序。其框架如以下圖所示其軟件層析結(jié)構(gòu)自上而下可以分為以下幾個(gè)層次:應(yīng)用程序Application;應(yīng)用程序框架Application Framework;各種庫Libraries和Android運(yùn)行環(huán)境RuntTime;操作系統(tǒng)層OS。 應(yīng)用程序 Android的應(yīng)用程序通常涉及用戶界面和用戶交互,這類程序是用戶實(shí)實(shí)在在感受到的。Android的應(yīng)用程序目前以Java語言編寫。Android本身提供桌面,聯(lián)系人, 和瀏覽

19、器等核心應(yīng)用。同時(shí)應(yīng)用程序開發(fā)者可以根據(jù)應(yīng)用程序框架層的API實(shí)現(xiàn)自己的程序,這也是Android開源的巨大潛力表達(dá)。Android這種開放而強(qiáng)大的平臺給每一個(gè)程序開發(fā)者提供了公平的時(shí)機(jī),每一個(gè)開發(fā)者都可以參加移動(dòng)互聯(lián)的世界,共同推動(dòng)移動(dòng)互聯(lián)的開展。 應(yīng)用程序框架普通的開發(fā)者可以使用Android核心應(yīng)用程序的系統(tǒng)API。Android的應(yīng)用開發(fā)框架涉及的非常巧妙,通過這套應(yīng)用框架,各種組件可以被用戶的應(yīng)用重復(fù)利用,各種效勞也可以被各種應(yīng)用重復(fù)應(yīng)用。開發(fā)人員應(yīng)該很好地理解這套框架的工作機(jī)制,這樣才能開發(fā)出更好的應(yīng)用程序。下面列舉應(yīng)用框架的主要局部:一組Views。這些UI組件包括列表、文本框、

20、按鈕等。通過這些UI組件,可以構(gòu)建應(yīng)用程序的試圖局部,這局部也就是用戶能看到的局部。ContentProviders。主要是提供一種機(jī)制,通過這種機(jī)制,各個(gè)應(yīng)用程序之間可以實(shí)現(xiàn)數(shù)據(jù)的互訪和共享。Resource Manager。它負(fù)責(zé)管理非代碼的訪問。如本地圖片資源,設(shè)計(jì)布局的XML文件等的訪問。Notification Manager。它能讓程序的將自己的警示信息顯示在狀態(tài)欄上。例如,當(dāng)有短信的時(shí)候,可以在狀態(tài)欄上顯示新短信的信息。Activity Manager。它管理應(yīng)用的生命周期,并且提供應(yīng)用頁面退出的機(jī)制。在Android應(yīng)用中,一個(gè)應(yīng)用一般都是多個(gè)頁面組成,而每個(gè)頁面的單位就是Ac

21、tivity。庫和運(yùn)行環(huán)境 Android包括一些C/C+庫,這些庫能被Android系統(tǒng)的不同組件使用。他們通過Android應(yīng)用程序框架為開發(fā)者提供效勞。Android應(yīng)用程序組成 要進(jìn)行應(yīng)用開發(fā),還需要對Android應(yīng)用構(gòu)造進(jìn)行深入的分析。Android應(yīng)用程序由以下4個(gè)模塊構(gòu)造而成: Activity Broadcast Intent Receiver Service Content Provider 當(dāng)然,也不是每個(gè)Android應(yīng)用程序都必須由這4局部組成,它可以根據(jù)開發(fā)者需求來進(jìn)行組合 。 在這里還需要介紹Intent的概念和使用方法,他在應(yīng)用程序的運(yùn)行中連接兩個(gè)不同的組件,通

22、過Intent你的程序可以向Android表達(dá)某種請求或者意愿,Android會根據(jù)意愿的內(nèi)容選擇適當(dāng)?shù)慕M件來請求。 Avtivity介紹 Activity是最根本的模塊。我們稱之為"活動(dòng)",在應(yīng)用程序中,一個(gè)活動(dòng)Activity通常就是一個(gè)單獨(dú)的屏幕。每一個(gè)活動(dòng)都被實(shí)現(xiàn)為一個(gè)獨(dú)立的類,并且從活動(dòng)基類中繼承而來,活動(dòng)類將會顯示由視圖控件組成的用戶接口,并對事件作出響應(yīng)。大多數(shù)的應(yīng)用都是由多個(gè)Activity顯示組成,例如,對一個(gè)文本信息應(yīng)用而言,第一個(gè)屏幕用來顯示發(fā)送消息的聯(lián)系人列表,第二個(gè)屏幕用來寫文本消息和選擇收件人,第三個(gè)屏幕查看消息歷史或者消息設(shè)置操作等。 這里的每

23、一個(gè)屏幕就是一個(gè)活動(dòng),很容易實(shí)現(xiàn)從一個(gè)屏幕到一個(gè)新的屏幕,并且完成新的活動(dòng)。當(dāng)一個(gè)新的屏幕翻開后,前一個(gè)屏幕將會暫停,并保存在歷史棧中。用戶可以返回到歷史棧中的前一個(gè)屏幕,當(dāng)屏幕不再使用時(shí),還可以從歷史棧中刪除。 簡單理解,Activity代表一個(gè)用戶所能看到的屏幕,主要用于處理應(yīng)用程序的整體性工作,例如,監(jiān)聽系統(tǒng)事件按鍵事件、觸摸屏事件等,為用戶顯示指定的View,啟動(dòng)其他Activity等。所有應(yīng)用的Activity都繼承于android.app.Activity類,該類是Android提供的基層類,其他的Activity繼承該父類后,通過父類的方法來實(shí)現(xiàn)各種功能,這種設(shè)計(jì)在其他領(lǐng)域也較為

24、常見。Broadcast Intent Receiver介紹 可以使用BroadcastReceiver來讓應(yīng)用對一個(gè)外部的時(shí)間作出相應(yīng)。例如,當(dāng) 呼入這個(gè)外部時(shí)間到來的時(shí)候,可以利用BroadcastReceiver進(jìn)行處理。BroadcastReceiver不能生成UI,也就是說對用戶是不透明的,用戶是看不到的。BroadcastReceiver通過NotificationManager來通知用戶這些事情發(fā)生了。BroadcastReceiver既可以在AndroiManifest.xml中注冊,也可以在運(yùn)行時(shí)的代碼使用Context.registerReceiver 進(jìn)行注冊。只要是注冊

25、了,當(dāng)時(shí)間來臨的時(shí)候,即使程序沒有啟動(dòng),系統(tǒng)也在需要的時(shí)候啟動(dòng)程序。各種應(yīng)用程序還可以通過Context.sendBroadcast 將他們自己的intent broadcasts播送給其他應(yīng)用程序。Service介紹 Service即"效勞"的意思,既然是效勞,那么Service將是一個(gè)生命周期長而且沒有用戶界面的程序。比方一個(gè)正在從播放列表中播放歌曲的媒體播放器,在這個(gè)媒體播放器應(yīng)用中,應(yīng)該會有多個(gè)activity,讓使用者可以選擇歌曲并播放歌曲。然而,音樂重放這個(gè)功能并沒有對應(yīng)的activity,因?yàn)槭褂谜邥J(rèn)為在導(dǎo)航到其他屏幕時(shí)音樂應(yīng)該還在播放。在這個(gè)例子中,媒體播

26、放器這個(gè)activity會使用Context.startService 來啟動(dòng)一個(gè)service,從而可以在后臺保持音樂的播放。同時(shí),系統(tǒng)也將保持這個(gè)service一直執(zhí)行,直到這個(gè)service運(yùn)行結(jié)束。另外,我們還可以通過使用Context.bindService 方法連接到一個(gè)service上如果這個(gè)service當(dāng)前還沒有處于啟動(dòng)狀態(tài),那么將啟動(dòng)它。當(dāng)連接到一個(gè)service之后,還可用service提供的接口與它進(jìn)行通訊。以媒體播放器為例,我們還可以執(zhí)行暫停、重播等操作。 Content Provider介紹 Android這個(gè)系統(tǒng)和其他的操作系統(tǒng)還不太一樣,我們需要記住的是,數(shù)據(jù)在

27、Android當(dāng)中是私有的,當(dāng)然這些數(shù)據(jù)包括文件數(shù)據(jù)和數(shù)據(jù)庫數(shù)據(jù),以及一些其他類型的數(shù)據(jù)。一個(gè)ContentProvider類實(shí)現(xiàn)了一組標(biāo)準(zhǔn)的方法接口,從而能夠讓其他的應(yīng)用保存或讀取此ContentProvider的各種數(shù)據(jù)類型,也就是說,一個(gè)程序可以通過實(shí)現(xiàn)一個(gè)ContentProvider的抽象接口將自己的數(shù)據(jù)暴露出去。外界根本看不到,也不用看到這個(gè)應(yīng)用暴露的數(shù)據(jù)在應(yīng)用當(dāng)中是如何存儲的,即用數(shù)據(jù)庫存儲還是文件存儲,還是通過網(wǎng)上獲得,這一切都不重要,重要的是外界可以通過這一套標(biāo)準(zhǔn)而統(tǒng)一的接口和程序里面的數(shù)據(jù)打交道??梢宰x取程序數(shù)據(jù),也可以刪除程序的數(shù)據(jù),當(dāng)然中間會涉及一些權(quán)限問題。Inten

28、t介紹 Intent是一種運(yùn)行時(shí)綁定runtime binding機(jī)制,它能在程序運(yùn)行的過程中連接兩個(gè)不同的組件。通過Intent,你的程序可以向Android表達(dá)某種請求或者意愿,Android會根據(jù)意愿的內(nèi)容選擇適當(dāng)?shù)慕M件來請求。比方,有一個(gè)Activity希望翻開網(wǎng)頁瀏覽器查看某一網(wǎng)頁的內(nèi)容,那么這個(gè)Activity只需要發(fā)出WEB_SEARCH_ACTION請求給Android,Android會根據(jù)Intent的請求內(nèi)容,查詢各組件注冊時(shí)聲明的IntentFilter,找到網(wǎng)頁瀏覽器Activity來瀏覽網(wǎng)頁。 Android的三個(gè)根本組件Activity,Service和Broadc

29、astReceiver,它們都是通過Intent機(jī)制激活的,而不同類型的組件有傳遞Intent的不同方式。要激活一個(gè)新的Activity,或者讓一個(gè)現(xiàn)有的Activity執(zhí)行新的操作,可以通過調(diào)用Context.startActivity 或者Activity.startActivityForResult 方法。這兩個(gè)方法需要傳入的Intent參數(shù)也稱為Activity Action Intent活動(dòng)行為意圖,根據(jù)Intent對象對目標(biāo)Activity描述的不同,來啟動(dòng)與之相匹配的Activity或傳遞信息。 2 要啟動(dòng)一個(gè)新的效勞,或者向一個(gè)已有的效勞傳遞新的指令,調(diào)用Context.sta

30、rtService 方法或調(diào)用Context.bindService 方法將調(diào)用此方法的上下文對象與Service綁定。 3 通過Context.sendBroadcast 、Context.sendOrderBroadcast 和Context.send-StickBroadcast 這三個(gè)方法可以發(fā)送BroadcastIntent。BroadcastIntent發(fā)送后,所有已注冊的擁有與之相匹配IntentFilter的BroadcastReceiver就會被激活。這種機(jī)制被廣泛運(yùn)用于設(shè)備或系統(tǒng)狀態(tài)變化的通知,一個(gè)常見的例子是,當(dāng)Android的電池電量過低時(shí),系統(tǒng)會發(fā)送Action為BA

31、TTERY_LOW的播送,接著任何可匹配該Action的IntentFilter注冊的BroadcastReceiver都會各自運(yùn)行自定義的處理代碼,比方關(guān)閉設(shè)備的WIFI和GPS以節(jié)省電池消耗。 Intent一旦發(fā)出,Android都會準(zhǔn)確找到相匹配的一個(gè)或多個(gè)Activity、Service或Broadcast-Receiver作為響應(yīng)。所以,不同類型的Intent消息不會出現(xiàn)重疊:BroadcastIntent消息只會發(fā)送給BroadcastReceiver,而絕不可能發(fā)送給Activity或Service。由startActivity 傳遞的消息也只可能發(fā)送給Activity,由sta

32、rtService 傳遞的Intent只可能發(fā)送給Service。 Intent對象抽象地描述了要執(zhí)行的操作,其描述的根本內(nèi)容可以分為組件名稱、Action動(dòng)作、Data數(shù)據(jù)、Category類別、Extra附加信息和Flag標(biāo)志位6局部 Intent分為顯式Intent和隱式Intent : 對于明確指出了目標(biāo)組件名稱的Intent,我們稱之為“顯式Intent。對于沒有明確指出目標(biāo)組件名稱的Intent,那么稱之為“隱式Intent。Android系統(tǒng)使用IntentFilter 來尋找與隱式Intent相關(guān)的對象。 顯式Intent直接用組件的名稱定義目標(biāo)組件,這種方式很直接。但是由于開

33、發(fā)人員往往并不清楚別的應(yīng)用程序的組件名稱,因此,顯式Intent更多用于在應(yīng)用程序內(nèi)部傳遞消息。比方在某應(yīng)用程序內(nèi),一個(gè)Activity啟動(dòng)一個(gè)Service。隱式Intent恰恰相反,它不會用組件名稱定義需要激活的目標(biāo)組件,它更廣泛地用于在不同應(yīng)用程序之間傳遞消息。Android應(yīng)用程序工程文件 典型的工程文件如以下圖所示: 與一般的Java工程一樣,src文件夾是工程的所有包及源文件.java,res文件夾中那么包含了工程中的所有資源,比方:程序圖標(biāo)drawable、布局文件layout、常量values等。下面來介紹其他Java工程中沒有的gen文件夾中的R.java文件和每個(gè)Andro

34、id工程都必須有的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)widget的設(shè)計(jì)網(wǎng)絡(luò)功能實(shí)現(xiàn) Android可以使用以下兩種網(wǎng)絡(luò)接口標(biāo)準(zhǔn)Java接口 .*下面提供了訪問 效勞的根本功能。使用這局部接口的根本操作主要包括:?創(chuàng)立 URL 以及 URLConnection / URLConnection 對

35、象?設(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 對象 URL url new URL your_url ; / 創(chuàng)立一個(gè) URL 連接,如果有代理的話可以指定一個(gè)代理。 URLConnection connection url.openConnection Proxy_yours ; / 對于 連接可以直接轉(zhuǎn)換成 UR

36、LConnection, / 這樣就可以使用一些 連接特定的方法,如 setRequestMethod 等 / URLConnection connection URLConnection url.openConnection Proxy_yours ; / 在開始和效勞器連接之前,可能需要設(shè)置一些網(wǎng)絡(luò)參數(shù) connection.setConnectTimeout 10000 ; connection.addRequestProperty "User-Agent", "J2me/MIDP2.0" ; / 連接到效勞器 connection.connect

37、 ; / 往效勞器寫數(shù)據(jù),數(shù)據(jù)會暫時(shí)被放到內(nèi)存緩存區(qū)中 / 如果僅是一個(gè)簡單的 GET,這一局部那么可以省略 OutputStream outStream connection.getOutputStream ; ObjectOutputStream objOutput new ObjectOutputStream outStream ; objOutput.writeObject new String "this is a string." ; objOutput.flush ; / 向效勞器發(fā)送數(shù)據(jù)并獲取應(yīng)答 InputStream in connection.getI

38、nputStream ; / 處理數(shù)據(jù) . catch Exception e / 網(wǎng)絡(luò)讀寫操作往往會產(chǎn)生一些異常,所以在具體編寫網(wǎng)絡(luò)應(yīng)時(shí) / 最好捕捉每一個(gè)具體以采取相應(yīng)措施 Apache接口 Apache Client 是一個(gè)開源工程,彌補(bǔ)了 .* 靈活性缺乏的缺點(diǎn),為客戶端的 編程提供高效、最新、功能豐富的工具包支持。Android 平臺引入了 Apache Client 的同時(shí)還提供了對它的一些封裝和擴(kuò)展,例如設(shè)置缺省的 超時(shí)和緩存大小等。早期的 Android 曾同時(shí)包括 Commons Client org.apachemons. client.* 和 Components org

39、.apache. .client.* ,不過當(dāng)前版本 1.5 中開發(fā)者只能使用后者,也就是說類似以下的一些類:使用這局部接口的根本操作與 .* 根本類似,主要包括:?創(chuàng)立 Client 以及 GetMethod / PostMethod, Request 等對象?設(shè)置連接參數(shù)?執(zhí)行 操作?處理效勞器返回結(jié)果import org.apache. . Entity; import org.apache. . Host; import org.apache. . Response; import org.apache. .auth.AuthScope; ials; import org.apache

40、. .client.methods. Get; import org.apache. .conn.params.ConnRoutePNames; import org.apache. .params. ConnectionParams; import org.apache. .client.params. ClientParams; try / 創(chuàng)立 Params 以用來設(shè)置 參數(shù)這一局部不是必需的 Params params new Basic Params ; / 設(shè)置連接超時(shí)和 Socket 超時(shí),以及 Socket 緩存大小 ConnectionParams.setConnection

41、Timeout params, 20 * 1000 ; ConnectionParams.setSoTimeout params, 20 * 1000 ; ConnectionParams.setSocketBufferSize params, 8192 ; / 設(shè)置重定向,缺省為 true ClientParams.setRedirecting params, true ; / 設(shè)置 user agent ProtocolParams.setUserAgent params, userAgent ; / 創(chuàng)立一個(gè) Client 實(shí)例 / 注意 Client Client new Client

42、 ; 是Commons Client / 中的用法,在 Android 1.5 中我們需要使用 Apache 的缺省實(shí)現(xiàn) Default Client Client Client new Default Client params ; / 創(chuàng)立 Get 方法,該方法會自動(dòng)處理 URL 地址的重定向 Get Get new Get " Response response client.execute Get ; if response.getStatusLine .getStatusCode ! Status.SC_OK / 錯(cuò)誤處理,例如可以在該請求正常結(jié)束前將其中斷 Get.abo

43、rt ; / 讀取更多信息 Header headers response.getHeaders ; Entity entity response.getEntity ; Header header response.getFirstHeader "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

44、注冊使用網(wǎng)絡(luò)功能。其xml語句為 uses-permission android:name "android.permission.INTENET"/ 我是利用Google提供的Web Service來完成從網(wǎng)絡(luò)獲取天氣信息任務(wù)的。 首先需要一個(gè)URL類表示我們要獲取內(nèi)容的網(wǎng)址 String aStrring "./google/ig/api?weather "+city; URL aURL new URL aString.replace " ","%20" ; 通過openStream 方法獲取xml信息,將其作

45、為一個(gè)參數(shù)傳給xml解析器進(jìn)行xml解析。xml解析的實(shí)現(xiàn) 我是通過利用SAX來實(shí)現(xiàn)xml的解析的。 用SAX解析xml,我們需要一個(gè)SAXParser對象。 SAXParserFactory spf SAXParseFactory.newInstance ; SAXParser sp spf.newSAXParser ; 有了SAXParser實(shí)例,接下來要想方法讀入xml文件。org.xml.sax.XMLReader為我們提供了這樣一個(gè)借口,它的方法setContentHandler允許我們在讀入xml之前注冊一系列處理器。 /*從SAXParser獲取XMLReader*/ XMLRe

46、ader xr sp.getXMLReader ; /*創(chuàng)立我們自己的內(nèi)容處理器*/ ExampleHandler myHander new ExampleHandler ; /*用內(nèi)容處理器處理XMLReader*/ xr.setContentHandler myHandler ; 設(shè)置好內(nèi)容處理器之后,就可以開始使用XMLReader讀取xml內(nèi)容,并通過myHandler對象返回從xml中獲得的數(shù)據(jù). /*XMLReader獲取xml文件并進(jìn)行解析*/ xr.pars new InputSource aURL.openStream ; XMLReader會便利讀取xml文件中的所有內(nèi)容,

47、在讀取過程中,事先注冊好的xml內(nèi)容處理器就會被依次觸發(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文件開始的地方會調(diào)用starDocument 方法,在文件結(jié)束的地方會調(diào)用endDocument 方法。 Xml中的節(jié)點(diǎn)總是以 . 的方式組織起來的,因此當(dāng)SAXParse

48、r解析到xml開頭的tag時(shí),starElement就會被調(diào)用。而當(dāng)SAXParser解析到xml結(jié)尾的tag時(shí),endElement就會被調(diào)用。 在xml文件中,我們常常在開始tag和結(jié)束tag之間放入數(shù)據(jù),當(dāng)SAXParser解析到中間數(shù)據(jù)時(shí),方法charactors 就會被調(diào)用。 下面是我根據(jù)Google API返回的xml格式重寫后的兩個(gè)方法,startElement 和endElement 。public void startElement String namespaceURI, String localName, String qName, Attributes atts thr

49、ows 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.equals "forecast_conditions" this.in_forecast_condition

50、s 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

51、localName.equals "forecast_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 loc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論