




已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
密級學(xué)士學(xué)位論文THESISOFBACHELOR(20072011年)題目基于ANDROID平臺的3G氣象軟件學(xué)院軟件學(xué)院系計(jì)算機(jī)軟件專業(yè)計(jì)算機(jī)軟件學(xué)號姓名指導(dǎo)教師起訖日期2010年12月至2011年5月ANDROID平臺3G手機(jī)氣象軟件摘要隨著智能手機(jī)的快速普及,智能手機(jī)操作系統(tǒng)市場風(fēng)生水起。為了讓智能手機(jī)用戶能夠隨時(shí)隨地查詢互聯(lián)網(wǎng)所提供的服務(wù),一種高效的辦法就是將應(yīng)用系統(tǒng)的功能拓展到手機(jī)終端上,讓手機(jī)能夠通過移動網(wǎng)以及互聯(lián)網(wǎng)訪問WEB網(wǎng)站并處理各種各樣的業(yè)務(wù)。因此,智能手機(jī)的應(yīng)用軟件及其需要的服務(wù)將有廣闊的發(fā)展前景。在如今這個(gè)智能手機(jī)系統(tǒng)群雄紛爭的時(shí)候,2008年GOOGLE推出了一款名為ANDROID的開源智能手機(jī)操作系統(tǒng),它采用LINUX內(nèi)核,開放手機(jī)聯(lián)盟OHA成員可以任意使用和修改SDK包,系統(tǒng)的開源性使其具有良好的拓展性。這款軟件包括了操作系統(tǒng)、用戶界面和應(yīng)用程序,即智能手機(jī)工作所需要的全部軟件。ANDROID的最大特點(diǎn)是其開放性體系架構(gòu),不僅具有非常好的開發(fā)、調(diào)試環(huán)境,而且還支持各種可擴(kuò)展的用戶體驗(yàn),包括豐富的圖形組件、多媒體支持功能以及強(qiáng)大的瀏覽器。因此,對于軟件從業(yè)人員來說,ANDROID平臺具有無限的吸引力。本文就在分析討論ANDROID手機(jī)軟件開發(fā)技術(shù)原理的基礎(chǔ)上,開發(fā)出能為用戶提供更好的基于ANDROID平臺的3G手機(jī)氣象軟件。關(guān)鍵字ANDROID;氣象軟件;智能手機(jī)平臺ABSTRACTWITHTHERAPIDPROLIFERATIONOFSMARTPHONES,SMARTPHONEOPERATINGSYSTEMMARKET,WINDANDWATERINORDERFORSMARTPHONEUSERSTOCHECKTHEINTERNETANYTIME,ANYWHERESERVICESPROVIDEDANEFFICIENTWAYTOEXPANDTHEFUNCTIONOFTHESYSTEMWILLBEAPPLIEDTOTHEMOBILEPHONETERMINAL,THEMOBILEPHONETOINTERNETACCESSVIAMOBILENETWORKS,ANDVARIETYOFWEBSITESANDPROCESSBUSINESSTHEREFORE,THESMARTPHONEAPPLICATIONSANDTHENEEDFORTHESERVICEWILLHAVEBROADPROSPECTSFORDEVELOPMENTINTODAYSSMARTPHONESYSTEMWHENDISPUTESWARLORDS,2008,GOOGLEINTRODUCEDASMARTPHONECALLEDTHEANDROIDOPENSOURCEOPERATINGSYSTEM,WHICHUSESLINUXKERNEL,OPENHANDSETALLIANCEOHAMEMBERSCANBEFREETOUSEANDMODIFYTHESDKPACKAGE,THESYSTEMITHASAGOODOPENSOURCENATUREOFTHEEXPANSIONOFTHESOFTWAREINCLUDESTHEOPERATINGSYSTEM,USERINTERFACEANDAPPLICATIONSTHATNEEDTOWORKSMARTPHONESALLTHESOFTWAREANDROIDSBIGGESTFEATUREISITSOPENARCHITECTURE,NOTONLYHASAVERYGOODDEVELOPMENTANDDEBUGGINGENVIRONMENT,BUTALSOSUPPORTSAVARIETYOFSCALABLEUSEREXPERIENCE,INCLUDINGRICHGRAPHICALCOMPONENTS,MULTIMEDIASUPPORT,ANDPOWERFULBROWSERTHEREFORE,FORSOFTWAREPROFESSIONALSIS,ANDROIDPLATFORMHASUNLIMITEDAPPEALINTHISPAPER,THEANALYSISANDDISCUSSIONANDROIDMOBILEPHONESOFTWAREDEVELOPMENTTECHNOLOGYONTHEBASISOFTHEPRINCIPLE,DEVELOPEDTOPROVIDEUSERSWITHBETTERPLATFORMTOTHE3GHANDSETSBASEDONANDROIDMETEOROLOGICALSOFTWAREKEYWORDSANDROID;WEATHERSOFTWARE;SMARTPHONEPLATFORM目錄摘要IABSTRACTII第一章緒論111研究內(nèi)容112研究意義113研究現(xiàn)狀和發(fā)展趨勢1第二章系統(tǒng)分析321研究目標(biāo)322需求分析323性能分析3第三章系統(tǒng)開發(fā)環(huán)境及相關(guān)技術(shù)431ANDROID開發(fā)環(huán)境介紹432ANDROID開發(fā)平臺搭建4第四章程序設(shè)計(jì)641用戶界面設(shè)計(jì)642數(shù)據(jù)庫設(shè)計(jì)643程序模塊設(shè)計(jì)7第五章程序開發(fā)951文件結(jié)構(gòu)與用途952數(shù)據(jù)提供者1053后臺服務(wù)16531獲取天氣數(shù)據(jù)16532讀取天氣數(shù)據(jù)實(shí)例19533定時(shí)更新時(shí)間。1954用戶界面19541程序入口類FORECASTWIDGET19542設(shè)置頁面CONFIGUREACTIVITY21543詳細(xì)頁面DETAILFORECASTACTIVITY2255動態(tài)特效23第六章系統(tǒng)測試25第七章總結(jié)29參考文獻(xiàn)30致謝31第一章緒論11研究內(nèi)容ANDROID平臺3G手機(jī)氣象軟件是基于ANDROID手機(jī)平臺,運(yùn)用JAVA語言,從GOOGLE上獲取天氣預(yù)報(bào)信息,開發(fā)出針對使用ANDROID平臺的手機(jī)天氣預(yù)報(bào)系統(tǒng)。12研究意義ANDROID平臺3G手機(jī)氣象軟件的開發(fā)可以進(jìn)一步擴(kuò)大氣象信息的覆蓋面,讓廣大公眾能夠在第一時(shí)間方便且快捷地獲取最新的氣象預(yù)報(bào)(預(yù)警)信息,以便提前預(yù)防,把氣象災(zāi)害造成的損失降到最低。同時(shí)也可以強(qiáng)化氣象公共服務(wù)的職能,完善公共服務(wù)體系、改善公共服務(wù)手段、增加公共服務(wù)產(chǎn)品、提高公共服務(wù)質(zhì)量,更好地發(fā)揮了氣象事業(yè)對經(jīng)濟(jì)社會發(fā)展的現(xiàn)實(shí)性作用。13研究現(xiàn)狀和發(fā)展趨勢據(jù)GARTNER最新數(shù)據(jù)顯示,2010年第二、三季度全球智能手機(jī)銷售繼續(xù)大幅增長,其中第三季度安卓占全球智能手機(jī)市場的255,僅次于塞班,成為第二大智能手機(jī)系統(tǒng)。2010第二、三季度與去年同期相比,增度分別是154及22,增勢迅猛。而塞班系統(tǒng)較09年的市場份額,盡管終端銷量有大幅度提升,但增勢下滑10,形勢非常嚴(yán)峻。其他操作系統(tǒng)的表現(xiàn)則要平穩(wěn)很多。安卓是首款開源代碼的操作系統(tǒng),采用LINUX內(nèi)核,開放手機(jī)聯(lián)盟(OHA)成員可以任意使用和修改安卓的SDK軟件包。系統(tǒng)的開源性使其具有良好的拓展性,一方面,為眾多移動應(yīng)用開發(fā)者提供了良好的系統(tǒng)性平臺,有利于移動應(yīng)用的集合;另一方面,終端廠商可以針對自身的特殊需要“定制化開發(fā)”。與此相比,盡管2010年2月,塞班基本完成開源工作,但由于代碼臃腫,用戶界面設(shè)計(jì)缺失,塞班的開源并無實(shí)際意義,錯失發(fā)展良機(jī)。據(jù)INFORMA預(yù)測,2012年,安卓手機(jī)銷量將超過諾基亞塞班手機(jī),屆時(shí)安卓將成為全球最大的智能手機(jī)平臺。谷歌表示目前安卓手機(jī)每日平均激活量為20萬部,銷售速度加速上漲。我們認(rèn)為,安卓在全球市場的成長壯大,塞班市場份額不斷下跌已成不爭事實(shí)。安卓操作系統(tǒng)發(fā)展迅猛主要得益于免費(fèi)、開源和良好產(chǎn)業(yè)運(yùn)作策略,這三點(diǎn)為安卓在智能手機(jī)市場贏得更多的發(fā)展機(jī)遇。系統(tǒng)的免費(fèi)讓更多的廠商加入,推動了份額的上升;代碼的開源讓更多的開發(fā)者進(jìn)入應(yīng)用開發(fā);應(yīng)用的豐富吸引了更多用戶選擇,這也是谷歌值得眾多廠商學(xué)習(xí)的地方。此外,谷歌通過OHA聯(lián)合眾多廠商進(jìn)行系統(tǒng)研發(fā),不斷更新版本,將系統(tǒng)應(yīng)用推廣到更多的終端產(chǎn)品中,確保用戶體驗(yàn)持續(xù)改善。第二章系統(tǒng)分析21研究目標(biāo)1了解ANDROID應(yīng)用程序的設(shè)計(jì)和開發(fā)過程;2使用多種組件進(jìn)行ANDROID平臺3G手機(jī)氣象軟件的開發(fā)。本軟件是基于ECLIPSE的開發(fā)環(huán)境,依托GOOGLE氣象數(shù)據(jù)建立氣象信息數(shù)據(jù)庫,開發(fā)出了針對ANDROID平臺的手機(jī)天氣預(yù)報(bào)系統(tǒng)。22需求分析本軟件是一個(gè)APPWIDGET應(yīng)用程序,啟動程序后可以進(jìn)行城市、更新頻率的設(shè)置,可以通過圖片和文字顯示當(dāng)前和未來的天氣狀況,包括溫度、濕度、風(fēng)向和雨雪情況等。這些天氣數(shù)據(jù)是通過后臺服務(wù)獲取的,這個(gè)后臺服務(wù)可以按照一定時(shí)間間隔,從GOOGLE上獲取天氣預(yù)報(bào)信息,并將天氣信息保存在數(shù)據(jù)庫中。從上面的描述中可以基本了解軟件的功能需求1啟動APPWIDGET應(yīng)用程序;2設(shè)置界面對要顯示天氣預(yù)報(bào)的城市及更新頻率進(jìn)行設(shè)置;3顯示界面通過文字和圖片顯示當(dāng)前的天氣情況,包括日期、時(shí)間、城市、最高溫度、最低溫度、當(dāng)前溫度等。4詳細(xì)界面通過文字圖片動畫顯示當(dāng)前的天氣情況,包括城市當(dāng)前天氣、溫度、風(fēng)向、風(fēng)速、濕度;同時(shí)顯示今后四天的天氣情況。23性能分析程序響應(yīng)速度快、安全性高、信息處理速度快。第三章系統(tǒng)開發(fā)環(huán)境及相關(guān)技術(shù)31ANDROID開發(fā)環(huán)境介紹ANDROID的上層應(yīng)用程序是用JAVA語言開發(fā),同時(shí)還需要基于DALVIK虛擬機(jī),所以,GOOGLE公司推薦使用主流的JAVA繼承開發(fā)環(huán)境ECLIPSE。只有ECLIPSE還不夠,因?yàn)槭鞘褂肑AVA語言進(jìn)行開發(fā),還應(yīng)該有由SUN公司提供的JAVASDK其中包括JREJAVARUNTIMEENVIRONMENT。此外,ANDROID的應(yīng)用程序開發(fā)和JAVA開發(fā)有較大區(qū)別的,所以還需要有GOOGLE提供的ANDROIDSDK。同時(shí),還需要在ECLIPSE安裝ADT,為ANDROID開發(fā)提供開發(fā)工具的升級或者變更,是ECLIPSE下開發(fā)工具的升級下載的工具。簡言之,需要以下軟件,才能搭建ANDROID開發(fā)環(huán)境,從而進(jìn)行ANDROID應(yīng)用程序的開發(fā)。1JAVASDK2ECLIPSE3ANDROIDSDK4ADT32ANDROID開發(fā)平臺搭建ANDROID開發(fā)平臺搭建步驟首先到HTTP/WWWECLIPSEORG/DOWNLOADS/下載ECLIPSE集成開發(fā)環(huán)境并且解壓,這里推薦下載JAVAEE集成版本,可以為平臺的搭建省下不少工作。接著再去HTTP/JAVASUNCOM/JAVASE/DOWNLOADS/INDEXJSP站點(diǎn)下載SDK后安裝,下載HTTP/DLGOOGLECOM/ANDROID/ANDROIDSDKWINDOWS15_R1ZIP,ANDROIDSDK15后解壓。第一步下載工序就結(jié)束了。雙擊ECLIPSE解壓后目錄中的ECLIPSEEXE然后啟動,選擇ECLIPSE菜單中的HELPINSTALLNEWSOFTWARE選項(xiàng)卡上的AVAILABLESOFTWARE,點(diǎn)擊右側(cè)的“ADD”輸入HTTP/DLSSLGOOGLECOM/ANDROID/ECLIPSE/后確定,然后在“WORKWITH”下拉菜單中選擇剛才輸入的網(wǎng)址。過一會就會出現(xiàn)一個(gè)DEVELOPERTOOLS選項(xiàng),勾上以后點(diǎn)擊NEXT以后ECLIPSE會自動網(wǎng)上查找ANDROID開發(fā)工具插件,然后找到ANDROIDDDMS和ANDROIDDEVELOPMENTTOOLS,選中這兩個(gè)點(diǎn)擊FINISH,ECLIPSE就會自動下載并安裝ANDROID插件了,最后會提示重啟ECLIPSE。重啟后選擇ECLIPSE菜單中的WINDOWSPREFERENCES在左側(cè)的ANDROID項(xiàng)目中SDKLOCATION中填入ANDROIDSDK解壓后的目錄,然后點(diǎn)擊APPLY。在WINDOWSXP的系統(tǒng)變量中的PATH變量中添加一個(gè)值,該值指向解壓后的ANDROIDSDK目錄下的TOOLS文件夾。第四章程序設(shè)計(jì)41用戶界面設(shè)計(jì)根據(jù)需求分析可以知道,應(yīng)用程序應(yīng)包含三個(gè)主要的用戶界面,這里需要進(jìn)一步分析每個(gè)用戶界面中應(yīng)該包括哪些顯示內(nèi)容。在“設(shè)置頁面”中,需要對要顯示天氣預(yù)報(bào)的城市及更新頻率進(jìn)行設(shè)置。在“顯示頁面”中,顯示當(dāng)前的天氣狀況,包括城市名稱、溫度、濕度、風(fēng)向、雨雪情況和獲取數(shù)據(jù)時(shí)間等信息。在“詳細(xì)頁面”動態(tài)顯示當(dāng)前天氣情況,還要顯示未來四天的天氣情況。根據(jù)對用戶界面顯示內(nèi)容的分析,繪制出用戶界面的草圖,如圖41所示。圖41用戶界面草圖42數(shù)據(jù)庫設(shè)計(jì)本軟件中有兩部分?jǐn)?shù)據(jù)需要存儲,一個(gè)是顯示頁面的數(shù)據(jù),另一個(gè)詳細(xì)頁面的數(shù)據(jù)。因此選擇SQLITE數(shù)據(jù)庫作為存儲數(shù)據(jù)的方法,建立數(shù)據(jù)庫FORCASTSDB,并且建立兩張表WEATHER_FORCASTT和WEATHER_WIDGET,分別存儲顯示頁面的數(shù)據(jù)和詳細(xì)頁面的數(shù)據(jù)。表41詳細(xì)頁面的數(shù)據(jù)庫表WEATHER_FORCAST的結(jié)構(gòu)屬性數(shù)據(jù)類型說明_IDINTEGER自動增加的主鍵WIDGETIDINTEGER組件的ID號DAYOFWEEKTEXT周幾LOWINTEGER最低溫度HIGHTINTEGER最高溫度ICONTEXT顯示天氣的圖標(biāo)CONDITIONTEXT未來天氣情況表42顯示頁面的數(shù)據(jù)庫表WEATHER_WIDGET的結(jié)構(gòu)屬性數(shù)據(jù)類型說明_IDINTEGER存儲WIDGET組件IDCITYTEXT進(jìn)行天氣信息查詢的城市名UPDATEMILISTEXT進(jìn)行天氣信息查詢的頻率,單位為分/次ISCONFIGUREDTEXT是否設(shè)置POSTALCODETEXT城市標(biāo)記FORECASTDATEINTEGER預(yù)報(bào)日期CONDITIONTEXT當(dāng)前天氣情況TEMPFINTEGER最高溫度TEMPCINTEGER最低溫度HUMIDITYTEXT當(dāng)前濕度ICONTEXT天氣圖標(biāo)WINDCONDITIONTEXT風(fēng)向風(fēng)速情況LASTUPDATETIMEINTEGER最后一次更新時(shí)間43程序模塊設(shè)計(jì)從功能需求上分析可以看出,整個(gè)應(yīng)用程序應(yīng)劃分為4個(gè)模塊,分別是程序啟動、用戶界面、后臺服務(wù)和數(shù)據(jù)庫適配器,各模塊之間的關(guān)系如圖42所示。從模塊結(jié)構(gòu)圖中不難看出,后臺服務(wù)是整個(gè)應(yīng)用程序的核心,主要是“數(shù)據(jù)獲取模塊”,負(fù)責(zé)周期性的從GOOGLE獲取天氣信息。后臺服務(wù)在程序啟動時(shí)就由APPWIDGETPROVIDER啟動,也可由用戶界面通過STARTSERVICE進(jìn)行啟動,啟動后的后臺服務(wù)將一直保持運(yùn)行狀態(tài)。用戶界面從數(shù)據(jù)庫中獲取天氣信息,而沒有直接通過網(wǎng)絡(luò)訪問GOOGLE的天氣數(shù)據(jù)。之所以這么實(shí)際,一方面可以避免因網(wǎng)絡(luò)通信不暢造成界面失去響應(yīng);另一方面,后臺服務(wù)可以及時(shí)更新數(shù)據(jù),以保證數(shù)據(jù)的準(zhǔn)確性。數(shù)據(jù)庫適配器封裝了所有對SQLITE數(shù)據(jù)庫操作的方法,用戶界面和后臺服務(wù)會調(diào)用它來實(shí)現(xiàn)數(shù)據(jù)庫操作。在完成用戶界面設(shè)計(jì)、數(shù)據(jù)庫設(shè)計(jì)和模塊設(shè)計(jì)后,至此程序設(shè)計(jì)階段基本完成。第五章程序開發(fā)51文件結(jié)構(gòu)與用途在程序開發(fā)階段,首先確定“ANDROID平臺3G手機(jī)氣象軟件”的工程名為TYWEATHER,據(jù)程序模塊設(shè)計(jì)的內(nèi)容,建立TYWEATHER工程。WEATHER工程源代碼的結(jié)構(gòu)如圖51所示。圖51TYWEATHER工程的源代碼文件為了使源代碼文件的結(jié)構(gòu)更加清晰,WEATHER工程設(shè)置了多個(gè)命名空間,分別用來保存用戶界面、數(shù)據(jù)庫、后臺服務(wù)和工具實(shí)體的源代碼文件,源代碼文件的名稱以及說明如表51所示。表51TYWEATHER工程的文件用途說明包名稱文件名說明COMTYWEATHERCONFIGUREACTIVITYJAVA“設(shè)置頁面”的ACTIVITYCOMTYWEATHERDETAILFORECASTACTIVITYJAVA“詳細(xì)頁面”的ACTIVITYCOMTYWEATHERFORECASTPROVIDERJAVA天氣預(yù)報(bào)相關(guān)數(shù)據(jù)提供者,操作數(shù)據(jù)庫COMTYWEATHERFORECASTSERVICEJAVA后臺進(jìn)程內(nèi)服務(wù)COMTYWEATHERFORECASTTIMESERVICEJAVA后臺時(shí)間服務(wù)COMTYWEATHERFORECASTWIDGETJAVA實(shí)現(xiàn)APPWIDGET組件,并啟動服務(wù)COMTYWEATHERWEBSERVICEHELPERJAVA網(wǎng)絡(luò)數(shù)據(jù)獲取模塊COMTYWEATHERUTILFORECASTENTITYJAVA未來天氣信息的類COMTYWEATHERUTILFORECASTUTILJAVA天氣信息工具類COMTYWEATHERUTILWIDGETENTITYJAVA當(dāng)前天氣信息的類ANDROID的資源文件保存在/RES的子目錄中。其中、/RES/ANIM目錄中保存的是產(chǎn)生動畫效果的XML文件,/RES/DRAWABLE/目錄中保存的是圖像文件,/RES/VALUES目錄中保存的是用來自定義字符串和顏色的文件,/RES/XML目錄中保存的是XML格式的數(shù)據(jù)文件。所有在程序開發(fā)階段可以被調(diào)用的資源都保存在這些目錄中,具體每個(gè)資源文件的用途可以參考表52表52資源文件名稱與用途資源目錄文件說明ROTATECURRENTWEATHERXML漸變透明度動畫效果TRANSLATECLOUDLEFTXML畫面轉(zhuǎn)換位置移動動畫效果(從左至右)TRANSLATECLOUDRIGHTXML畫面轉(zhuǎn)換位置移動動畫效果(從右至左)TRANSLATERAIN01XML畫面轉(zhuǎn)換位置移動動畫效果(從上至下)TRANSLATERAIN02XML畫面轉(zhuǎn)換位置移動動畫效果(從上至下)TRANSLATERAIN03XML畫面轉(zhuǎn)換位置移動動畫效果(從上至下)TRANSLATERAIN04XML畫面轉(zhuǎn)換位置移動動畫效果(從上至下)ANIMTRANSLATERAIN05XML畫面轉(zhuǎn)換位置移動動畫效果(從上至下)CLOUDYPNGDOTSPNGNUMBER_7_TAHOMAPNGDRAWABLEWEATHER_SUNNYPNG這個(gè)文件夾里是工程里所用的圖片,如有表示天氣狀況、數(shù)字等,此處不贅述。CONFIGUREXML設(shè)置城市、天氣更新頻率的布局WEATHERXML“顯示頁面”的布局DETAILXML“詳細(xì)顯示”頁面上邊的顯示當(dāng)前天氣的布局LAYOUTDETAILITEMSXML“詳細(xì)顯示”頁面下邊的顯示未來天氣的布局COLORXML保存顏色的XML文件VALUESSTRINGSXML保存字符串的XML的文件XMLWEATHERWIDGETXMLAPPWIDGET的屬性文件52數(shù)據(jù)提供者數(shù)據(jù)提供者FORECASTPROVIDER繼承CONTENTPROVIDER,是在應(yīng)用程序間共享數(shù)據(jù)的一種接口機(jī)制。應(yīng)用程序在不同的進(jìn)程中運(yùn)行,因此,數(shù)據(jù)和文件在不同的應(yīng)用程序之間是不能夠直接進(jìn)行訪問的。而COTENTPROVIDER為程序員提供了較高級的數(shù)據(jù)共享方法,應(yīng)用程序可以指定需要共享的數(shù)據(jù),而其他應(yīng)用程序則可以在不知數(shù)據(jù)來源、路徑的情況下,對共享數(shù)據(jù)進(jìn)行查詢、添加、刪除和更新等操作。在介紹FORECASTPROVIDER的核心代碼前,首先了解一下WIDGETENTITYJAVA當(dāng)前天氣信息的類和FORECASTENTITYJAVA(未來天氣信息的類)。1WIDGETENTITYJAVA的部分代碼PUBLICCLASSWIDGETENTITYPRIVATEARRAYLISTDETAILSNEWARRAYLIST/FORECASTENTITY對象PRIVATEINTEGERID/編號PRIVATEINTEGERUPDATEMILIS/更新頻率PRIVATESTRINGCITY/城市PRIVATESTRINGPOSTALCODE/城市標(biāo)記PRIVATELONGFORECASTDATE/預(yù)報(bào)時(shí)間PRIVATESTRINGCONDITION/天氣情況PRIVATEINTEGERTEMPF/華氏溫度PRIVATEINTEGERTEMPC/攝氏溫度PRIVATESTRINGHUMIDITY/濕度PRIVATESTRINGICON/天氣圖標(biāo)PRIVATESTRINGWINDCONDITION/風(fēng)力風(fēng)向PRIVATELONGLASTUPDATETIME/最后更新時(shí)間PRIVATEINTEGERISCONFIGURED/是否已設(shè)置從代碼中可以看出,除FORECASTENTITY的對象DETAILS,WIDGETENTITY類中有以上公有靜態(tài)屬性ID、UPDATEMILIS、UPDATEMILIS、POSTALCODE、FORECASTDATE、CONDITION、TEMPF、TEMPC、HUMIDITY、ICON、WINDCONDITION、LASTUPDATETIME、ISCONFIGURED,完全對應(yīng)數(shù)據(jù)庫中WEATHER_WIDGET的表。2FORECASTENTITYJAVA的部分代碼PUBLICCLASSFORECASTENTITYPRIVATEINTEGERID/編號PRIVATESTRINGDAYOFWEEK/星期PRIVATEINTEGERLOW/最低溫度PRIVATEINTEGERHIGHT/最高溫度PRIVATESTRINGICON/天氣圖標(biāo)PRIVATESTRINGCONDITION/天氣情況PRIVATEINTEGERWIDGETID/組件ID從代碼中可以看出,WIDGETENTITY類中有以上公有靜態(tài)屬性ID、DAYOFWEEK、LOW、HIGHT、ICON、CONDITION、WIDGETID,完全對應(yīng)數(shù)據(jù)庫中WEATHER_FORCAST的表。在創(chuàng)建FORECASTPROVIDER時(shí),首先需要使用數(shù)據(jù)庫、文件系統(tǒng)或網(wǎng)絡(luò)實(shí)現(xiàn)底層存儲功能,這里我們采用數(shù)據(jù)庫建立了數(shù)據(jù)庫設(shè)計(jì)中的兩張表,從而實(shí)現(xiàn)了底層存儲功能。然后在繼承CONTENTPROVIDER的類中實(shí)現(xiàn)基本數(shù)據(jù)操作的接口函數(shù),包括添加、刪除、查找和更新等功能。下面就核心代碼進(jìn)行分析。1創(chuàng)建數(shù)據(jù)庫DATABASEHELPER類繼承SQLITEOPENHELPER,SQLITEOPENHELPER這個(gè)類可以輔助建立、更新和打開數(shù)據(jù)庫。DATABASEHELPER在建立數(shù)據(jù)庫時(shí),同時(shí)建立了兩個(gè)數(shù)據(jù)庫表WEATHER_WIDGET和WEATHER_FORCAST,并對保存配置信息的表進(jìn)行了初始化。具體代碼如下所示PRIVATESTATICCLASSDATABASEHELPEREXTENDSSQLITEOPENHELPER/數(shù)據(jù)庫名稱PRIVATESTATICFINALSTRINGDATABASE_NAME“FORECASTSDB“/數(shù)據(jù)庫版本PRIVATESTATICFINALINTDATABASE_VERSION2/構(gòu)造方法,重載父類構(gòu)造PUBLICDATABASEHELPERCONTEXTCONTEXTSUPERCONTEXT,DATABASE_NAME,NULL,DATABASE_VERSIONPUBLICVOIDONCREATESQLITEDATABASEDB/創(chuàng)建WEATHER_WIDGET表PUBLICVOIDONCREATESQLITEDATABASEDB/創(chuàng)建WEATHER_WIDGET表DBEXECSQL“CREATETABLE“TABLE_WIDGET“/創(chuàng)建WEATHER_FORECAST表DBEXECSQL“CREATETABLE“TABLE_FORECAST“/重寫ONUPGRADE()方法OVERRIDEPUBLICVOIDONUPGRADESQLITEDATABASEDB,INTOLDVERSION,INTNEWVERSION2URI設(shè)置CONTENTPROVIDER可以提供多個(gè)數(shù)據(jù)集,調(diào)用者使用URI(通用資源標(biāo)識符)對不同的數(shù)據(jù)集的數(shù)據(jù)進(jìn)行操作。URI用來地位任何遠(yuǎn)程或本地的可用資源。CONTENTPROVIDER使用的URI語法結(jié)構(gòu)CONTENT/。因此,我們就需要先來對URI進(jìn)行設(shè)置。代碼如下PUBLICSTATICCLASSWEATHERWIDGETSIMPLEMENTSBASECOLUMNS/繼承BASECOLUMNS可以提供自動生成的ID/聲明CONTENT_URIPUBLICSTATICFINALURICONTENT_URIURIPARSE“CONTENT/“AUTHORITY“/WIDGETS“PUBLICSTATICFINALSTRINGFORECAST_END“FORECASTS“/指操作多條數(shù)據(jù)PUBLICSTATICFINALSTRINGCONTENT_TYPE“VNDANDROIDCURSORDIR/AWIDGET“/指操作單條數(shù)據(jù)PUBLICSTATICFINALSTRINGCONTENT_ITEM_TYPE“VNDANDROIDCURSORITEM/WIDGET“3查詢功能首先我們先了解一下SQLITEQUERYBUILDER的QUERY方法。QUERY(SQLITEDATABASEDB,STRINGPROJECTIONIN,STRINGSELECTION,STRINGSELECTIONARGS,STRINGGROUPBY,STRINGHAVING,STRINGSORTORDER,STRINGLIMIT),參數(shù)說明如表53參數(shù)說明SQLITEDATABASEDB要查詢的數(shù)據(jù)庫實(shí)例STRINGPROJECTIONIN是一個(gè)字符串?dāng)?shù)組,里邊的每一項(xiàng)代表了需要返回的列名STRINGSELECTION相當(dāng)于SQL語句中的WHERE部分STRINGSELECTIONARGS是一個(gè)字符串?dāng)?shù)組,里邊的每一項(xiàng)依次替代在第三個(gè)參數(shù)中出現(xiàn)的問號()STRINGGROUPBY相當(dāng)于SQL語句當(dāng)中的GROUPBY部分STRINGHAVING相當(dāng)于SQL語句當(dāng)中的HAVING部分STRINGSORTORDER描述是怎么進(jìn)行排序STRINGLIMIT相當(dāng)于SQL當(dāng)中的LIMIT部分,控制返回的數(shù)據(jù)的個(gè)數(shù)查詢功能的核心代碼如下PUBLICCURSORQUERYURIURI,STRINGPROJECTION,STRINGSELECTION,STRINGSELECTIONARGS,STRINGSORTORDER/GETREADABLEDATABASE這個(gè)函數(shù)會數(shù)據(jù)庫是否存在、版本號和是否可讀等情況,/決定在返回?cái)?shù)據(jù)庫對象前,是否需要數(shù)據(jù)庫。返回一個(gè)可讀的數(shù)據(jù)庫對象。SQLITEDATABASEDBDBHELPERGETREADABLEDATABASE/聲明了一個(gè)SQLITEQUERYBUILDER對象,該對象利用傳入的參數(shù)生成一個(gè)完整的/SQLITE查詢語句,還可以完成查詢工作并返回結(jié)果集(CURSOR)。SQLITEQUERYBUILDERQBNEWSQLITEQUERYBUILDERSTRINGLIMITNULL/通過一個(gè)SWITCH語句,完成了通過URI種類的辨別來生成不通的SQLITEQUERYBUILDER對象的工作。SWITCHURIMATCHERMATCHURICASEWIDGETSQBSETTABLESTABLE_WIDGETBREAKCASEWIDGETS_IDSTRINGAPPWIDGETIDURIGETPATHSEGMENTSGET1QBSETTABLESTABLE_WIDGETQBAPPENDWHEREBASECOLUMNS_ID“APPWIDGETIDBREAKCASEWIDGETS_FORECASTS/PICKALLTHEFORECASTSFORGIVENWIDGET,SORTEDBYDATEAND/IMPORTANCE/獲得APPWIDGETIDSTRINGAPPWIDGETIDURIGETPATHSEGMENTSGET1/為該SQLITEQUERYBUILDER對象設(shè)置它查詢工作將針對的表QBSETTABLESTABLE_FORECAST/QB的WHERE條件QBAPPENDWHEREFORECASTENTITYWIDGET_ID“APPWIDGETID/按照BASECOLUMNS_ID進(jìn)行排序SORTORDERBASECOLUMNS_ID“ASC“BREAKCASEFORECASTSQBSETTABLESTABLE_FORECASTBREAKCASEFORECASTS_IDSTRINGFORECASTIDURIGETPATHSEGMENTSGET1QBSETTABLESTABLE_FORECASTQBAPPENDWHEREBASECOLUMNS_ID“FORECASTIDBREAKRETURNQBQUERYDB,PROJECTION,SELECTION,SELECTIONARGS,NULL,NULL,SORTORDER,LIMIT4添加、刪除、更新功能由于核心代碼類似,此處不一一贅述。添加功能PUBLICURIINSERTURIURI,CONTENTVALUESVALUES刪除功能PUBLICINTDELETEURIURI,STRINGSELECTION,STRINGSELECTIONARGS更新功能PUBLICINTUPDATEURIURI,CONTENTVALUESVALUES,STRINGSELECTION,STRINGSELECTIONARGS5類型匹配增刪改查通過SWITCH判斷,進(jìn)行不同的操作,因而還需要對關(guān)鍵字進(jìn)行類型匹配。核心代碼如下/GETTYPE()函數(shù)用來返回指定URI的MIME數(shù)據(jù)類型CONTENT_TYPE表示URI是多條數(shù)據(jù)CONTENT_ITEM_TYPE表示是單條數(shù)據(jù)/OVERRIDEPUBLICSTRINGGETTYPEURIURI/TODOAUTOGENERATEDMETHODSTUBSWITCHURIMATCHERMATCHURICASEWIDGETSRETURNWEATHERWIDGETSCONTENT_TYPECASEWIDGETS_IDRETURNWEATHERWIDGETSCONTENT_ITEM_TYPECASEWIDGETS_FORECASTSRETURNWEATHERDETAILSCONTENT_TYPECASEFORECASTSRETURNWEATHERDETAILSCONTENT_TYPECASEFORECASTS_IDRETURNWEATHERDETAILSCONTENT_ITEM_TYPETHROWNEWILLEGALSTATEEXCEPTION/構(gòu)造無匹配方式的URIMATCHERPRIVATESTATICFINALURIMATCHERURIMATCHERNEWURIMATCHERURIMATCHERNO_MATCHPRIVATESTATICFINALINTWIDGETS101PRIVATESTATICFINALINTWIDGETS_ID102PRIVATESTATICFINALINTWIDGETS_FORECASTS103PRIVATESTATICFINALINTFORECASTS201PRIVATESTATICFINALINTFORECASTS_ID202/聲明了URIMATCHER的匹配方式和返回代碼STATICURIMATCHERADDURIAUTHORITY,“WIDGETS“,WIDGETSURIMATCHERADDURIAUTHORITY,“WIDGETS/“,WIDGETS_IDURIMATCHERADDURIAUTHORITY,“WIDGETS/FORECASTS“,WIDGETS_FORECASTSURIMATCHERADDURIAUTHORITY,“FORECASTS“,FORECASTSURIMATCHERADDURIAUTHORITY,“FORECASTS/“,FORECASTS_ID53后臺服務(wù)后臺服務(wù)是TYWEATHER工程的核心模塊,在用戶啟動后持續(xù)在后臺運(yùn)行,直到用戶停止服務(wù)。后臺服務(wù)主要有三個(gè)功能,一是周期性的獲取GOOGLE的天氣數(shù)據(jù)并存儲到SQLITE,二是從SQLITE讀取出要顯示的數(shù)據(jù),三是定時(shí)更新“顯示頁面”的時(shí)間。531獲取天氣數(shù)據(jù)天氣數(shù)據(jù)的獲取天氣數(shù)據(jù)分為以下三個(gè)步驟1從GOOGLE提供的WEBSERVICE中獲取的天氣數(shù)據(jù),數(shù)據(jù)的獲取地址是HTTP/WWWGOOGLECOM/IG/APIWEATHERSREADERRESPONSEREADERWIDGETENTITYWIDGETENTITYNULL/通過HTTPCLIENT創(chuàng)建HTTP連接HTTPCLIENTCLIENTNEWDEFAULTHTTPCLIENT/創(chuàng)建HTTPGET請求HTTPGETREQUESTNEWHTTPGETSTRINGFORMATWEBSERVICE_URL,POSTALCODETRYLOGDTAG,“GETGOOGLESWEATHERINFOMATION“/發(fā)出請求HTTPRESPONSERESPONSECLIENTEXECUTEREQUESTSTATUSLINESTATUSRESPONSEGETSTATUSLINELOGDTAG,“REQUESTRETURNEDSTATUS“STATUS/取出回復(fù)信息HTTPENTITYENTITYRESPONSEGETENTITYRESPONSEREADERNEWINPUTSTREAMREADERENTITYGETCONTENT,“GB2312“CATCHIOEXCEPTIONETHROWNEWFORECASTPARSEEXCEPTION“PROBLEMCALLINGFORECASTAPI“,EIFRESPONSEREADERNULLWIDGETENTITYPARSERESPONSERESPONSEREADERRETURNWIDGETENTITY2調(diào)用輕量級XML解析器XMLPULLPARSER對從網(wǎng)絡(luò)上獲取的字節(jié)流數(shù)據(jù)進(jìn)行解析,并且將解析結(jié)果保存在WIDGETENTITY對象中。核心代碼如下/返回類型為WIDGETENTITYPRIVATESTATICWIDGETENTITYPARSERESPONSEREADERRESPONSEREADERTHROWSFORECASTPARSEEXCEPTIONTRY/使用工廠類XMLPULLPARSERFACTORY來創(chuàng)建解析器XMLPULLPARSERXMLPULLPARSERFACTORYFACTORYXMLPULLPARSERFACTORYNEWINSTANCEXMLPULLPARSERXPPFACTORYNEWPULLPARSERSTRINGTAGNAMENULLXPPSETINPUTRESPONSEREADERINTEVENTTYPEXPPGETEVENTTYPEWHILEEVENTTYPEXMLPULLPARSEREND_DOCUMENTIFEVENTTYPEXMLPULLPARSERSTART_TAGTAGNAMEXPPGETNAME/根據(jù)不同的標(biāo)簽做不同的解析IFPROBLEM_CAUSEEQUALSTAGNAMETHROWNEWFORECASTPARSEEXCEPTION“THECITYISNONCORRECT“ELSEIFFORECAST_INFORMATIONEQUALSTAGNAMEDEALWITHINFOMATIONTAGNAME,WIDGETENTITY,XPPELSEIFCURRENT_CONDITIONSEQUALSTAGNAMEDEALWITHCURRENTCONDITIONSTAGNAME,WIDGETENTITY,XPPELSEIFFORECAST_CONDITIONSEQUALSTAGNAMEDEALWITHFORECASTCONDITIONSTAGNAME,WIDGETENTITY,XPPEVENTTYPEXPPNEXTCATCHIOEXCEPTIONERETURNWIDGETENTITY3將解析好的數(shù)據(jù)存儲到SQLITE數(shù)據(jù)庫中。其過程是使用CONTENTRESOLVER對象,通過URI間接調(diào)用CONTENTPROVIDER,使用CONTENTRESOLVER對象與CONTENTPROVIDER進(jìn)行交互,而CONTENTRESOLVER則通過URI確定需要訪問的CONTENTPROVIDER的數(shù)據(jù)集。核心代碼如下,調(diào)用關(guān)系如圖51所示。CONTENTPROVIDE文件系統(tǒng)數(shù)據(jù)庫網(wǎng)絡(luò)CONTENTRESOLVERURI圖51CONTENTPROVIDER調(diào)用關(guān)系CONTENTRESOLVERRESOLVERCONTEXTGETCONTENTRESOLVERRESOLVERDELETEFORECASTURI,NULL,NULLCONTENTVALUESVALUESNEWCONTENTVALUESFORFORECASTENTITYFORECASTWIDGETENTITYGETDETAILSVALUESCLEARVALUESPUTFORECASTENTITYDAYOFWEEK,FORECASTGETDAYOFWEEKRESOLVERINSERTFORECASTURI,VALUES注意FORFORECASTENTITYFORECASTWIDGETENTITYGETDETAILS相當(dāng)于FOREACH語句,在WIDGETENTITYGETDETAILS集合里打印出所有類型為FORECASTENTITY的FORECAST變量。532讀取天氣數(shù)據(jù)實(shí)例通過WEBSERVICEHELPERGETWIDGETENTITY方法操作數(shù)據(jù)庫取出所需要的數(shù)據(jù),這一部分與上一節(jié)的“將解析好的數(shù)據(jù)存儲到SQLITE數(shù)據(jù)庫中”的關(guān)鍵點(diǎn)相同,為節(jié)約篇幅,此處不贅述。533定時(shí)更新時(shí)間。APPWIDGET一啟動就會啟動FORCASTTIMESERVICE這個(gè)后臺服務(wù),此服務(wù)設(shè)置了每隔20秒刷新一次時(shí)間,“顯示頁面”通過這個(gè)后臺服務(wù)獲取系統(tǒng)時(shí)間從而顯示。核心代碼如下ALARMMANAGERALARMMANAGERALARMMANAGERGETSYSTEMSERVICECONTEXTALARM_SERVICEALARMMANAGERSETALARMMANAGERRTC_WAKEUP,NOWUPDATEMILIS,PENDINGINTENT至此,后臺服務(wù)介紹完畢,最后還需要在ANDROIDMANIFESTXML文件中注冊后臺服務(wù)。54用戶界面在用戶界面設(shè)計(jì)上,采用了APPWIDGET框架結(jié)構(gòu),提供直觀的交互操作。三個(gè)用戶界面風(fēng)格簡約、操作簡便,用戶體驗(yàn)將非常好。541程序入口類FORECASTWIDGETFORECASTWIDGET在設(shè)計(jì)上采用了APPWIDGET框架結(jié)構(gòu),APPWIDGET就是HOMESCREEN上顯示的小部件,通過在HOMESCREEN空白處長按,在彈出的對話框中選擇WIDGET部件來進(jìn)行創(chuàng)建。此外,長按部件后并拖動到垃圾箱里進(jìn)行刪除。創(chuàng)建APPWIDGET需要以下四個(gè)步驟1定義WIDGET布局文件,此文件是RES/LAYOUT/WEATHERXML,采用ABSOLUTELAYOUT方式進(jìn)行布局需要注意的是在這個(gè)文件中所使用的組件必須是REMOTEVIEWS所支持的。2定義WIDGET的基本屬性文件,此文件是/RES/XML/WEATHERWIDGETXML。代碼如下/更新的時(shí)間周期3創(chuàng)建FORECASTWIDGETJAVA類,此類繼承自APPWIDGETPROVIDER,主要的功能有獲取需要更新的桌面小控件;啟動獲取天氣預(yù)報(bào)信息的服務(wù);啟動時(shí)間信息的服務(wù);更新桌面小控件顯示內(nèi)容;更新時(shí)間信息。核心代碼如下PUBLICCLASSFORECASTWIDGETEXTENDSAPPWIDGETPROVIDEROVERRIDEPUBLICVOIDONUPDATECONTEXTCONTEXT,APPWIDGETMANAGERAPPWIDGETMANAGER,INTAPPWIDGETIDSSUPERONUPDATECONTEXT,APPWIDGETMANAGER,APPWIDGETIDS/獲取需要更新的桌面小控件FORECASTSERVICEADDWIDGETIDSAPPWIDGETIDS/啟動獲取天氣預(yù)報(bào)信息的服務(wù)CONTEXTSTARTSERVICENEWINTENTCONTEXT,FORECASTSERVICECLASS/啟動時(shí)間信息的服務(wù)CONTEXTSTARTSERVICENEWINTENTCONTEXT,FORECASTTIMESERVICECLASS/更新桌面小空間顯示內(nèi)容PUBLICSTATICREMOTEVIEWSUPDATEVIEWSCONTEXTCONTEXT,URIURI/更新時(shí)間信息PUBLICSTATICREMOTEVIEWSUPDATETIMECONTEXTCONTEXT4APPWIDGETPROVIDER對應(yīng)一個(gè)RECEIVER屬性,需要更新ANDROIDMANIFESTXML。代碼如下542設(shè)置頁面CONFIGUREACTIVITYCONFIGUREACTIVITY繼承ACTIVITY并且實(shí)現(xiàn)了VIEWONCLICKLISTENER接口,APPWIDGET第一次啟動之前會先運(yùn)行CONFIGUREACTIVITY,會出現(xiàn)設(shè)置頁面用戶進(jìn)行設(shè)置,點(diǎn)擊保存按鈕就會將設(shè)置好的參數(shù)會存儲到SQLITE中。核心代碼如下/ONCLICK事件PUBLICVOIDONCLICKVIEWVSWITCHVGETIDCASERIDBTNSAVECITYEDITCITYGETTEXTTOSTRINGUPDATETIMEINTEGERPARSEINTEDITUPDATETIMEGETTEXTTOSTRINGCONTENTVALUESVALUESNEWCONTENTVALUESVALUESPUTBASECOLUMNS_ID,WIDGETIDVALUESPUTWIDGETENTITYPOSTALCODE,CITYVALUESPUTWIDGETENTITYUPDATE_MILIS,UPDATETIMEVALUESPUTWIDGETENTITYLAST_UPDATE_TIME,1VALUESPUTWIDGETENTITYIS_CONFIGURED,1CONTENTRESOLVERRESOLVERGETCONTENTRESOLVER/通過CONTENTRESOLVER對象存儲數(shù)據(jù)RESOLVERINSERTWEATHERWIDGETSCONTENT_URI,VALUESFORECASTSERVICEADDWIDGETIDSNEWINTWIDGETID/啟動獲取天氣預(yù)報(bào)信息的后臺服務(wù)STARTSERVICENEWINTENTTHIS,FORECASTSERVICECLASSSETCONFIGURERESULTACTIVITYRESULT_OKFINISHBREAKCONFIGUREACTIVITY的布局文件是RES/LAYOUT/CONFIGUREXML,采用了LINEARLAYOUT的布局方式。代碼如下543詳細(xì)頁面DETAILFORECASTACTIVITYDETAILFORECASTACTIVITY主要用來顯示詳細(xì)的天氣信息,包括當(dāng)天和未來四天的天氣信息。為了能夠以列表的形勢顯示多行數(shù)據(jù),并制定每行數(shù)據(jù)的布局,使用了LISTACTIVITY。LISTACTIVITY可以不通過SETCONTENTVIEW設(shè)置布局,也不必重載ONCREATE方法,而直接將顯示列表加載到LISTACTIVIT
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 內(nèi)購房轉(zhuǎn)讓合同范本
- 個(gè)人轉(zhuǎn)讓德文合同范本
- 分包混凝土合同范本
- 買賣車位轉(zhuǎn)讓合同范本
- 包子工用工合同范本
- 創(chuàng)業(yè)加盟合同范本
- 廣西買房合同范本
- 出國勞務(wù)外派合同范本
- 勞動合同范本工資
- 出租包車合同范本
- 2022-2023學(xué)年湖南省長沙市統(tǒng)招專升本語文模擬練習(xí)題三及答案
- 社會救助法課件
- 1.裝配式建筑概述(裝配式混凝土結(jié)構(gòu)施工技術(shù))
- 第七講+漢字字音
- 新零件的成熟保障MLA
- 【基于杜邦分析法的企業(yè)盈利能力研究國內(nèi)外文獻(xiàn)綜述4000字】
- 初中語文七下-上下句默寫
- 《董存瑞舍身炸碉堡》PPT課件新
- 新川教版信息技術(shù)六年級下冊全冊教案
- 第20章補(bǔ)充芯片粘接技術(shù)
- 旅行社運(yùn)營實(shí)務(wù)電子課件 5.1 旅行社電子商務(wù)概念
評論
0/150
提交評論