Android3G手機天氣預報系統-畢業論文_第1頁
Android3G手機天氣預報系統-畢業論文_第2頁
Android3G手機天氣預報系統-畢業論文_第3頁
Android3G手機天氣預報系統-畢業論文_第4頁
Android3G手機天氣預報系統-畢業論文_第5頁
已閱讀5頁,還剩35頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

分分 類類 號:號:TP315TP315 學校代碼:學校代碼:1146011460 學學號:號:0841310508413105 南京曉莊學院本科生畢業論文南京曉莊學院本科生畢業論文 A Android3Gndroid3G 手機天氣預報系統手機天氣預報系統 A Android3Gndroid3G phonephone weatherweather forecastforecast systemsystem 所在院(系所在院(系) : 學學 生生 姓姓 名:名: 指指 導導 老老 師:師: 研究起止日期研究起止日期: 二二一一一一年十二月至二年十二月至二一二一二年五月年五月 學位論文獨創性聲明學位論文獨創性聲明 本人鄭重聲明: 1. 堅持以“求實、創新”的科學精神從事研究工作。 2. 本論文是我個人在導師指導下進行的研究工作和取得的研究成果。 3. 本論文中除引文外,所有實驗、數據和有關材料均是真實的。 4. 本論文中除引文和致謝的內容外,不包含其他人或其它機構已經發表或 撰寫過的研究成果。 5. 其他同志對本研究所做的貢獻均已在論文中作了聲明并表示了謝意。 作者簽名: 日期: 目錄目錄 緒論1 1.1 研究內容1 1.2 研究意義1 1.3 可行性研究1 1.4 研究現狀和發展趨勢. 2 二 、系統分析4 2.1 研究目標4 2.2 需求分析4 2.3 性能分析5 三、平臺與關鍵技術研究. 6 3.1 Android 開發環境介紹 6 3.2 Android 開發平臺搭建 6 3.3 Android 關鍵技術研究 7 四、系統設計10 4.1 模塊.10 4.2 數據交互12 4.3 用戶交互13 4.4 系統管理15 4.5 數據庫設計與實現. 19 4.6 程序模塊設計24 五、系統實現與測試28 5.1 系統實現28 5.2 系統測試31 參考文獻34 致謝35 摘摘要要 隨著智能手機的快速普及,智能手機操作系統市場非常活躍。為了讓智能手機用戶能夠隨時隨 地查詢互聯網所提供的服務,讓手機能夠通過移動網以及互聯網訪問 Web 網站并處理各種各樣的業 務,一種高效的辦法就是將應用系統的功能拓展到手機終端上。因此,智能手機的應用軟件及其需 要的服務將有廣闊的發展前景。 在如今這個智能手機系統群雄紛爭的時候,它采用 Linux 內核,開放手機聯盟成員可以任意使 用和修改 SDK 包,系統的開源性使其具有良好的拓展性。這款軟件包括了操作系統、用戶界面和應 用程序,即智能手機工作所需要的全部軟件。2008 年 Google 推出了一款名為 Android 的開源智能 手機操作系統, Android 的最大特點是其開放性體系架構,不僅具有非常好的開發、調試環境,而 且還支持各種可擴展的用戶體驗,包括豐富的圖形組件、多媒體支持功能以及強大的瀏覽器。因此, 對于軟件從業人員來說,Android 平臺具有無限的吸引力。 本文就在分析討論 Android 手機軟件開發技術原理的基礎上,開發出能為用戶提供更好的基于 Android 平臺的 3G 手機氣象軟件。 關鍵字:關鍵字:androidandroid;天氣預報系統;智能手機平臺;天氣預報系統;智能手機平臺 ABSTRACT With the rapid proliferation of smart phones, smart phone operating system market is very active. In order to allow smart phone users to be able to query the services provided by the Internet anytime, anywhere, so that the phone can be accessed through the mobile network and the Internet Web site and handle a variety of business, an efficient way is the application function of the system extended to the mobile terminal on. Therefore, the smart phone applications and the service will have broad prospects for development. Warlords dispute of this smart phone system today, it uses the Linux kernel, the Open Handset Alliance members can be used and modify the SDK package, open source, it has a good expansion. This software includes the operating system, user interface and applications, smart phones need to work all of the software. In 2008, Google launched a product called the Android open-source smart phone operating system, Androids biggest characteristic is its open architecture, not only has a very good development, debugging environment, but also supports a variety of scalable user experience. Including rich graphical components, and multimedia support features and great browser. Therefore, for software professionals, the Android platform has unlimited appeal. On the basis of analysis and discussion of the Android mobile phone software development technical principles, developed to provide users with better 3G handsets based on Android platform of meteorological software Keywords:android;weather software;smart phone platform 1 緒論 1.11.1 研究內容研究內容 Android 平臺天氣預報系統是基于 Android 手機平臺,基于 Java,從 Google 上獲取天氣預報信 息,開發出針對使用 Android 平臺的手機天氣預報系統的應用軟件。 為了讓智能手機用戶能夠隨時隨地查詢互聯網所提供的服務,讓手機能通過移動網和互聯網訪 問 Web 網站并處理各項業務,是一種高效的辦法就是將應用系統的功能拓展到手機終端。Android 系統是 Google 公司開發的一個開源手機操作系統,它包括了用戶界面、操作系統和應用程序,即 智能手機工作所需的全部應用軟件。Android 的最大特點是它的開放性體系架構,不僅具有非常好 的調試、環境開發,而且還具有各種可擴展的設施,包括豐富的多媒體支持功能和圖形組件強大的 瀏覽器,技術已經趨于成熟。 1.21.2 研究意義研究意義 Android 平臺 3G 手機天氣預報系統的開發可以進一步擴大天氣信息的覆蓋面,以便提前預防, 把氣象災害造成的損失降到最低,使得廣大公眾能夠在第一時間方便且快捷地獲取最新的天氣預報 信息。同時也可以強化天氣公共服務的職能,改善公共服務手段、完善公共服務體系、增加公共服 務產品、提高公共服務質量,更好地發揮了氣象事業對經濟社會發展的現實性作用。 這款手機天氣預報系統給人們生活帶來方便快捷的全天候信息,在人們日常生活中必不可少的 生活信息。本系統界面明了,操作簡單,適合所有年齡階段的運用。對于提高人們生活水平質量有 一定的促進。 1.31.3 可行性研究可行性研究 隨著計算機應用的日益普及和深化,隨時隨地了解今明天的天氣情況已經成為一種趨勢。本項 目要開發的是基于單機的天氣查詢系統。由于現代都市的快節奏,再天天守著電視機看雷打不動的 天氣預報已經變得越來越不現實了。因此,實現一個將各種天氣查詢服務功能集成起來的信息系統 就顯得十分必要,即可以節省時間,又可以實現個性化的服務,減少不必要的等待和繁重的信息。 開發的系統要求界面友好,方便直觀。既要方便管理員對天氣情況進行添加、刪除、修改、查詢和 統計等管理,又要方便用戶及時了解最新的天氣狀況。 2 而且隨著現在 android 手機的越來越流行和發展,使用 android 手機的人數越來越多,據調查,使 用智能手機的用戶中,手機里下載天氣預報軟件的用戶占有 84%,所以這是一個很大的用戶平臺, 根據開發平臺的應用需求,決定開發這樣一款天氣預報系統軟件。 1.41.4 研究現狀和發展趨勢研究現狀和發展趨勢 據 Gartner 最新數據顯示,從 2010 年第二、三季度全球智能手機銷售持續大幅增長,形成了良 好的態勢,其中第三季度安卓占全球智能手機市場的 26%,僅次于塞班,成為世界上第二大智能手 機系統。2010 第二、三季度與去年同期相比,增度分別是 15.8%及 22%,增長迅猛。而塞班系統較 09 年的市場銷售狀況,盡管終端銷量有大幅度提升,但增勢下滑 9.6%,情況不好。其他操作系統的 表現則要平穩很多。 圖 1-1Gartner數據整理 安卓是全球首款開源代碼的操作系統,開放手機聯盟(OHA)成員可以任意使用和修改安卓的 SDK 軟件包,采用 Linux 內核。系統的開源性使其具有良好的拓展性,一方面,終端廠商可以針對 自身的特殊需要“定制化開發”;另一方面,為眾多移動應用開發者提供了良好的系統性平臺,有 利于移動應用的集合。與此相比,盡管 2010 年 2 月,塞班基本完成開源工作,但由于代碼臃腫,用 戶界面設計缺失,塞班的開源并無實際意義,錯失發展良機。 據 Informa 預測,2012 年,安卓手機銷量將超過諾基亞塞班手機,屆時安卓將成為全球最大的 智能手機平臺。谷歌表示目前安卓手機每日平均激活量為 23 萬部,銷售速度正在加速上漲。 我們認為,安卓在全球市場的成長壯大,塞班市場份額不斷下跌已成不可爭議的事實。安卓操 作系統發展迅猛主要得益于開源、免費和良好產業運作策略,這三點為安卓在智能手機市場贏得更 多的發展機遇。代碼的開源讓更多的開發者進入應用開發;系統的免費讓更多的廠商加入,推動了 3 份額的上升;應用的豐富吸引了更多用戶選擇,這也是谷歌值得眾多廠商學習的地方。此外,谷歌 通過 OHA 聯合眾多廠商進行系統研發,不斷更新版本,將系統應用推廣到更多的終端產品中,確保 用戶體驗持續改善。 南京曉莊學院 2012 屆本科畢業論文 4 二 、系統分析 2.12.1研究目標研究目標 1. 了解 Android 應用程序的設計和開發過程; 2. 使用多種組件進行 Android 平臺 3G 手機天氣預報軟件的開發。 本軟件是基于 Eclipse 的開發環境,依托 Google 氣象數據建立天氣預報信息數據庫, 開發出了針對 Android 平臺的手機天氣預報系統。 2.22.2需求分析需求分析 手機發展到現在已經成為廣大人們群眾的日常使用的通訊工具, 手機具有的功能也日趨 完善。手機用戶也可以選擇開通 GPRS 網絡服務,此服務大大的方便了人們對于手機上網的 需求,從而帶動了手機軟件發展,我國的移動通訊功能得到了很大的提高。手機軟件可以在 安裝在手機上的軟件,完善原始系統的不足與個性化。隨著科技的發展,現在手機的功能也 越來越多,越來越強大。再也不像以前那么死板簡單。目前發展到了可以和掌電腦相媲美。 本設計在現有普通手機的基礎上, 可以在手機上實現天氣狀況的實時報告和天氣預報功 能。方便人們的出行和生活。 本軟件是一個 App Widget 應用程序,啟動程序后可以進行城市、更新頻率的設置,可 以通過圖片和文字顯示當前和未來的天氣狀況,包括溫度、濕度、風向和雨雪情況等。這些 天氣數據是通過后臺服務獲取的,這個后臺服務可以按照一定時間間隔,從 Google 上獲取 天氣預報信息,并將天氣信息保存在數據庫中。 從上面的描述中可以基本了解軟件的功能需求: 1. 啟動 App Widget 應用程序; 2. 設置界面:對要顯示天氣預報的城市及更新頻率進行設置; 3. 詳細界面:通過文字圖片動畫顯示當前的天氣情況,包括城市當前天氣、溫度、風 向、風速、濕度;同時顯示今后四天的天氣情況。 4. 顯示界面:通過文字和圖片顯示當前的天氣情況,包括日期、時間、城市、最高溫 度、最低溫度、當前溫度等。 南京曉莊學院 2012 屆本科畢業論文 5 2.32.3 性能分析性能分析 1. 點擊 ChinaWeather.apk 安裝。 2. 到桌面長摁空白桌面,選擇窗口小部件,選擇 chinaweather。 3. 填入你要關注的城市(拼音) 。點擊保存即可獲得城市的天氣預報。 本軟件操作簡單,應用方便,設計人性化,程序響應速度快、安全性高、信息處理速度 快。 南京曉莊學院 2012 屆本科畢業論文 6 三、平臺與關鍵技術研究 3.13.1AndroidAndroid 開發環境介紹開發環境介紹 Android 的上層應用程序是用 Java 語言開發,同時還需要基于 Dalvik 虛擬機,所以, 使用 Java 語言進行開發, 還應該有由 SUN 公司提供的 Java SDK(其中包括 JRE: Java Runtime Environment)。在 Eclipse 安裝 ADT,為方便 Android 開發提供開發工具的升級或者變更, 是 Eclipse 下開發工具的升級下載的工具。 同時,Google 公司推薦使用主流的 Java 繼承開發環境 Eclipse。此外,Android 的應用 程序開發和 Java 開發有較大區別的, 所以還需要有 Google 提供的 Android SDK。 換句話說, 需要以下軟件,才能搭建 Android 開發環境,從而進行 Android 應用程序的開發。 1. Eclipse 2. Java SDK 3.ADT 4.Android SDK 3.23.2 AndroidAndroid 開發平臺搭建開發平臺搭建 Android 開發平臺搭建步驟: 1 首先到 /downloads/下載 Eclipse 集成開發環境并且解壓,這里 推 薦 下 載 Java EE 集 成 版 本 , 可 以 為 平 臺 的 搭 建 省 下 不 少 工 作 。 接 著 再 去 SDK1.5 后解 壓。第一步下載工序就結束了。 2 雙擊 Eclipse 解壓后目錄中的 eclipse.exe 然后啟動,選擇 Eclipse 菜單中的 Help- Install New Software- 選項卡上的 Available Software,點擊右側的“Add”輸入 http:/dl- with”下拉菜單中選 擇剛才輸入的網址。過一會就會出現一個 Developer Tools 選項,勾上以后點擊 Next 以后 Eclipse 會自動網上查找 Android 開發工具插件,然后找到 Android DDMS 和 Android Development Tools,選中這兩個點擊 Finish,Eclipse 就會自動下載并安裝 Android 插件 南京曉莊學院 2012 屆本科畢業論文 7 了,最后會提示重啟 Eclipse。 3 在 WindowsXP 的系統變量中的 path 變量中添加一個值,該值指向解壓后的 Android SDK 目錄下的 tools 文件夾。 4 重啟后選擇 Eclipse 菜單中的 Windows- Preferences 在左側的 Android 項目中 SDK Location 中填入 Android SDK 解壓后的目錄,然后點擊 Apply。 3.33.3 AndroidAndroid 關鍵技術研究關鍵技術研究 Android 平臺是基于 java 語言開發的, 其中 android 主要是四大組建構成的, Activity、 Service、Broadcast Receiver、Content Provider。 1.Activity Activity 就是一個用戶界面,比如打電話程序,實現一個打電話的 Activity,通訊錄也 是一個 Activity,通話記錄也是一個 Activity 等等,這些 Activity 都是獨立的,但組合 在一起就是一個完整功能的應用程序了。 2.Service 從字面上意思就是服務的意思, 其實就是 Activity 的后面服務, 他們在很多地方都相 輔相成的,封裝有一個完整的功能邏輯實現,Service 就是為 Activity 在后面服務的,作 為 Activity 的堅實后盾。Service 在后臺為 Activity 提供所需要的功能。Android 中得服 務其實與 windows 中得服務類似,它執行長時間運行的操作,或運程進程執行工作。服務不 提供用戶界面。 Android 中的服務,和我們通常說的 Windows 服務,Web 的后臺服務又有一些相近,它 們通常都是后臺長時間運行,接受上層指令,完成相關事務的模塊。用運行模式來看, Activity 是跳,從一個跳到一個,這有點像模態對話框,給一個輸入,然后不管不顧的讓 它運行,離開時返回輸出。而 Service 不是這樣的,Service 主要是等著上層連接上它,然 后產生一段持久的通信。 但和一般的 Service 還是有所不同,Android 的 Service 和所有四大組件一樣,其進程 模型都是可以配置的, 調用方和發布方都可以有權利來選擇是把這個組件運行在同一個進程 下,還是不同的進程下。它凸顯了 Android 的運行特點。 Android 中用來做數據序列化的 類是 Parcel,封裝了序列化的細節,向外提供了足夠對象化的訪問接口,Android 號稱實現 非常高效。 南京曉莊學院 2012 屆本科畢業論文 8 Service 從實現角度看,最特別的就是 RPC 的實現了,其他內容,都會接近于 Activity 的一些實現。 3.Broadcast Receiver 從字面意思是廣播接收者, 其實和我們生活中得廣播意思相近, 在發生什么事情的時候, 會以廣播的形式告知我們。廣播又分為普通廣播和有序廣播。普通廣播是異步的,理論上是 同時收到的。你不能對他做任何操作,不能終止。有序廣播,在接收到廣播時可以加入自己 的操作,傳遞給下一個接收者,也可以終止廣播。Android 系統中最常見的廣播電池電量低 得時候,收到短信的時候,USB 連接的時候等等。 內容提供者主要用于應用程序的數據共享設置,你可以把數據存儲在文件系統中,或 者 SQLite 數據庫上,網絡,或者其他的持久性存儲位置。你可以訪問這些數據或者修改, 其他應用程序也可以訪問或者修改。 在 Android 中,充分考慮了廣泛的這類需求,于是就有了 Broadcast Receiver 這樣的 一個組件。每個 Broadcast Receiver 都可以接收一種或若干種 Intent 作為觸發事件,當發 生這樣事件的時候,系統會負責喚醒或傳遞消息到該 Broadcast Receiver,任其處置。在 此之前和這以后,Broadcast Receiver 是否在運行都變得不重要了。 當 Broadcast Receiver 接收到相關的消息,它們通常做一些簡單的處理,然后轉化稱 為一條 Notification,一次振鈴,一次震動,抑或是啟動一個 Activity 進行進一步的交互 和處理。所以,雖然 Broadcast 整個邏輯不復雜,卻是足夠有用和好用,它統一了 Android 的事件廣播模型,讓很多平臺都相形見絀了 4.Content Provider 應用程序可以通過 Content Provider 來訪問其他應用程序的一些私有數據,這是 Android 提供的一種標準的共享機制。共享的數據可以存在在很多方面,比如在系統中、數 據庫中或者在其他的一些程序里。Content Provider 可以擴展自己的 Content Provider 類, 通過實現自己的類的接口來控制其他數據的存儲。然后程序不會直接調用 ContentProvider 中的方法,而是通過任何一個能與 Contentprovider 通訊。 任何時候當 Android 系統收到一個需要某個組件進行處理的請求的時候,Android 會確 保處理此請求的組件的宿主進程是否已經在運行,如果沒有,則立即啟動這個進程,當請求 的組件的宿主進程已經在運行, 它會繼續查看請求的組件是否可以使用, 如果不能立即使用, 它會創建一個請求的組件的實例來響應請求。 Content Provider,內容提供者主要用于應用程序的數據共享設置,你可以把數據存儲 南京曉莊學院 2012 屆本科畢業論文 9 在文件系統中,或者 SQLite 數據庫上,網絡,或者其他的持久性存儲位置。你可以訪問這 些數據或者修改,其他應用程序也可以訪問或者修改。 在各大組件中,Service 和 Content Provider 都是那種需要持續訪問的。Service 如果 是一個耗時的場景,往往會提供異步訪問的接口,而 Content Provider 不論效率如何,都 提供的是約定的同步訪問接口。因為 Content Provider 僅是提供數據訪問的,它不能確信 具體的使用場景如何,會怎樣使用它的數據;而相比之下,Service 包含的邏輯更復雜更完 整,可以抉擇大部分時候使用某接口的場景,從而確定最貼切的接口是同步還是異步,簡化 了上層調用的邏輯。 南京曉莊學院 2012 屆本科畢業論文 10 四、系統設計 4.14.1 模塊模塊 4.1.1 天氣預報顯示 根據需求分析可得, 用戶在使用這款軟件是希望它的快捷方便, 所以我們把這款軟件的 主界面定在了手機桌面上,調用的數據使用在桌面顯示。桌面的布局分為 3 大塊。其中主要 是相對布局,劃分區域,作為以后使用功能上的加強。在時間節點上,我們采用實時更新, 并放大了手機現有的時間,讓用戶擁有更好的體驗。左下區域分為日期、城市、天氣。中間 為天氣圖標,根據不同的天氣狀況來更換不同的圖片,讓用戶有更直觀的了解。右側為最搞 溫度、最低溫度、現在溫度。讀取的數據加以分別后重新排列在界面上,讓用戶的使用更加 方便,舒暢。 在用戶界面設計上,采用了AppWidget框架結構,提供直觀的交互操作。三個用戶界面 風格簡約、操作簡便,用戶體驗將非常好。 DetailForecastActivity主要用來顯示詳細的天氣信息, 包括當天和未來四天的天氣信 息。為了能夠以列表的形勢顯示多行數據,并制定每行數據的布局,使用了ListActivity。 ListActivity可以不通過setContentView( )設置布局,也不必重載onCreate( )方法, 而直接將顯示列表加載到ListActivity,增加了使用的便利性。在此工程中,仍然使用 setContentView( )設置布局,這樣做的好處是可以在界面中設置更為復雜的顯示元素。核 心代碼如下: /繼承ListActivity publicpublic classclass DetailForecastActivity extendsextends ListActivity /獲取游標,訪問數據庫 / Query for any matching forecast data and create adapter Uri forecastUri = Uri.withAppendedPath(mData, WeatherWidgets.FORECAST_END); Cursor forecastCursor = managedQuery(forecastUri, DetailDateWidget.detailProjection, null, null, null); listAdapter = new ForecastAdapter(this, forecastCursor); 列表適配器代碼: 南京曉莊學院 2012 屆本科畢業論文 11 private class ForecastAdapter extends ResourceCursorAdapter public ForecastAdapter(Context context, Cursor c) super(context, R.layout.detailitems, c); / TODO Auto-generated constructor stub System.out.println(“ForecastAdapter“); Override public void bindView(View view, Context context, Cursor c) / TODO Auto-generated method stub System.out.println(“View ForecastAdapter“); ImageView icon = (ImageView) view.findViewById(R.id.dDetailImage); TextView day = (TextView) view.findViewById(R.id.ddDayText); TextView condition = (TextView) view.findViewById(R.id.ddConditionText); TextView temp = (TextView) view.findViewById(R.id.ddTempCText); icon.setImageResource(WeatherUtil.getDetailForecastIcon(c.getString(4); day.setText(c.getString(1); condition.setText(c.getString(5); temp.setText(c.getInt(2) + “/“ + c.getInt(3) + “); 效果如下圖2所示: 南京曉莊學院 2012 屆本科畢業論文 12 圖 4-2 天氣呈現界面 4.1.2 用戶提醒 用戶提醒功能是天氣預報額外的功能, 主要我們運用了手機自帶的提醒功能, 經過我們 的頁面圖標設置,只要點擊應用的圖標,用戶就可以自然的跳轉到提醒功能上去,方便用戶 設置鬧鈴。這個功能是有待開發的,在天氣溫差過大時,我們能提供給用戶數據反饋,提醒 用戶注意溫差,在天氣降溫時,提醒用戶注意保暖,這是一種很有用的功能,但現在主要是 主觀上的控制,客觀上的提醒功能還有待開發。 4.24.2 數據交互數據交互 從 Google 提 供 的 Web Service 中 獲 取 的 天 氣 數 據 , 數 據 的 獲 取 地 址 是 : /創建Http Get請求 HttpGet request = newnew HttpGet(String.format(WEBSERVICE_URL, postalCode); 南京曉莊學院 2012 屆本科畢業論文 13 trytry Log.d(TAG, “get googles weather infomation“); /發出請求 HttpResponse response = client.execute(request); StatusLine status = response.getStatusLine(); Log.d(TAG, “Request returned status “ + status); /取出回復信息 HttpEntity entity = response.getEntity(); responseReader = newnew InputStreamReader(entity.getContent(), “GB2312“); 4.34.3 用戶交互用戶交互 4.3.1 城市交互 ConfigureActivity 繼 承 Activity 并 且 實 現 了 View.OnClickListener 接 口 , AppWidget 第一次啟動之前會先運行 ConfigureActivity,會出現設置頁面用戶進行設置, 點擊保存按鈕就會將設置好的參數會存儲到 SQLite 中。核心代碼如下: city = editCity.getText().toString(); updatetime =Integer.parseInt(editUpdatetime.getText().toString(); ContentValues values = new ContentValues(); values.put(BaseColumns._ID, widgetId); values.put(DataWidget.POSTCODE, city); values.put(DataWidget.UPDATEMILIS, updatetime); values.put(DataWidget.LASTUPDATETIME, -1); values.put(DataWidget.ISCONFIGURED, 1); ContentResolver resolver = getContentResolver(); resolver.insert(WeatherWidgets.CONTENT_URI, values); / start service System.out.println(“start Service!“); 南京曉莊學院 2012 屆本科畢業論文 14 DataForecastService.addWidgetIDs(new intwidgetId); startService(new Intent(this, DataForecastService.class);setConfigureResult(Activity.RESULT_OK); finish(); break; ConfigureActivity的布局文件是res/layout/configure.xml,采用了LinearLayout的 布局方式。 效果如圖3所示: 圖 4-3城市選擇頁面 4.3.2數據庫交互 以 往 數 據 查 詢 將 解 析 好 的 數 據 存 儲 到 SQLite 數 據 庫 中 。 其 過 程 是 : 使 用 ContentResolver 對象,通過 URI 間接調用 ContentProvider,使用 ContentResolver 對象 與 ContentProvider 進 行 交 互 , 而 ContentResolver 則 通 過 URI 確 定 需 要 訪 問 的 ContentProvider 的數據集。核心代碼如下,調用關系如圖 4 所示。 南京曉莊學院 2012 屆本科畢業論文 15 圖4-4ContentProvider調用關系 ContentResolver resolver = context.getContentResolver(); resolver.delete(forecastUri, nullnull, nullnull); ContentValues values = newnew ContentValues(); forfor (DetailDateWidget forecast : widgetEntity.getDetails() values.clear(); values.put(DetailDateWidget.DAYOFWEEK, forecast.getDayOfWeek(); resolver.insert(forecastUri, values); 注意: for(DetailDateWidgetforecast :widgetEntity.getDetails()相當于foreach語 句,在widgetEntity.getDetails()集合里打印出所有類型為DetailDateWidget的 forecast變量。 4.44.4 系統管理系統管理 4.4.1 天氣數據管理 讀取天氣數據實例通過WebServiceHelper.getWidgetEntity()方法操作數據庫取出所 需要的數據, 這一部分與上一節的 “將解析好的數據存儲到SQLite數據庫中” 的關鍵點相同, 為節約篇幅,此處不贅述。 調用輕量級XML解析器XmlPullParser對從網絡上獲取的字節流數據進行解析, 并且將解 析結果保存在WidgetEntity對象中。 南京曉莊學院 2012 屆本科畢業論文 16 4.4.2 時間管理 AppWidget一啟動就會啟動DataTimeService這個后臺服務, 此服務設置了每隔20秒刷新 一次時間,“顯示頁面”通過這個后臺服務獲取系統時間從而顯示。核心代碼如下: AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, now + updateMilis, pendingIntent); 至此,后臺服務介紹完畢,最后還需要在AndroidManifest.xml文件中注冊后臺服務。 4.4.3 頁面現實布局管理 根據需求分析可以知道, 應用程序應包含三個主要的用戶界面, 這里需要進一步分析每 個用戶界面中應該包括哪些顯示內容。 在“設置頁面”中,需要對要顯示天氣預報的城市及更新頻率進行設置。在“顯示頁面” 中,顯示當前的天氣狀況,包括城市名稱、溫度、濕度、風向、雨雪情況和獲取數據時間等 信息。在“詳細頁面”動態顯示當前天氣情況,還要顯示未來四天的天氣情況。 根據對用戶界面顯示內容的分析,繪制出用戶界面的草圖,如圖5所示。 圖 4-5 用戶界面草圖 4.4.4 后臺服務 后臺服務是ChinaWeather工程的核心模塊, 在用戶啟動后持續在后臺運行, 直到用戶停 止服務。后臺服務主要有三個功能,一是周期性的獲取Google的天氣數據并存儲到SQLite, 南京曉莊學院 2012 屆本科畢業論文 17 二是從SQLite讀取出要顯示的數據,三是定時更新“顯示頁面”的時間。 4.4.5 App Widget啟動 Android開發應用除了程序應用,還有App Widget應用。先簡單說說App Widget的原理。 App Widget是在桌面上的一塊顯示信息的東西,通過單擊App Widget跳轉到程序入口類。而 系統自帶的程序,典型的App Widget是music,這個Android內置的音樂播放小程序。這個是 典型的App Widget+app應用。就是一個程序既可以通過App Widget啟動,也可以通過App啟 動。App Widget就是一個AppWidgetProvider+一個UI界面顯示(預先綁定了好多Intent), 界面上的信息可以通過程序控制而改變, 單擊Widget上的控件只能激發發送一個Intent, 或 發出一個Service的啟動通知。 而AppWidgetProvider可以攔截這個Intent, 而進行相應的處 理。 WeatherWidget在設計上采用了AppWidget框架結構,AppWidget就是HomeScreen上顯示 的小部件,通過在HomeScreen空白處長按,在彈出的對話框中選擇Widget部件來進行創建。 此外,長按部件后并拖動到垃圾箱里進行刪除。創建AppWidget需要以下四個步驟: 定義Widget布局文件, 此文件是res/layout/weather.xml, 采用AbsoluteLayout方式進行布 局需要注意的是在這個文件中所使用的組件必須是RemoteViews所支持的。 定義Widget的基本屬性文件,此文件是/res/xml/weatherwidget.xml。代碼如下: 效果如圖6所示: 南京曉莊學院 2012 屆本科畢業論文 18 圖4-6桌面顯示圖 創建WeatherWidget.java類, 此類繼承自AppWidgetProvider, 主要 的功能有:獲取需要更新的桌面小控件;啟動時間信息的服務;啟動獲取天氣預報信息的服 務;更新時間信息;更新桌面小控件顯示內容。核心代碼如下: publicpublic classclass WeatherWidget extendsextends AppWidgetProvider Override publicpublic voidvoid onUpdate(Context context, AppWidgetManager appWidgetManager,intint appWidgetIds) supersuper.onUpdate(context, appWidgetManager, appWidgetIds); / 獲取需要更新的桌面小控件 ForecastService.addWidgetIDs(appWidgetIds); / 啟動獲取天氣預報信息的服務 context.startService(newnew Intent(context, ForecastService.classclass); / 啟動時間信息的服務 context.startService(newnew Intent(context, ForecastTimeService.classclass); /更新桌面小控件顯示內容 publicpublic staticstatic RemoteViews updateViews(Context context, Uri uri) /更新時間信息 publicpublic staticstatic RemoteViews updateTime(Context context) 南京曉莊學院 2012 屆本科畢業論文 19 AppWidgetProvider對應一個receiver屬性,需要更新AndroidManifest.xml。代碼如下: 效果如圖7所示: 圖 4-7 關閉系統圖 4.54.5 數據庫設計與實現數據庫設計與實現 數據提供者 DataForecastService 繼承 ContentProvider,是在應用程序間共享數據的 一種接口機制。應用程序在不同的進程中運行,因此,數據和文件在不同的應用程序之間是 不能夠直接進行訪問的。而 CotentProvider 為程序員提供了較高級的數據共享方法,應用 南京曉莊學院 2012 屆本科畢業論文 20 程序可以指定需要共享的數據,而其他應用程序則可以在不知數據來源、路徑的情況下,對 共享數據進行查詢、添加、刪除和更新等操作。 在介紹 DataForecastService 的核心代碼前, 首先了解一下 WeatherUtil.java(當前天 氣信息的類)和 DataWidget.java(未來天氣信息的類) 。 WeatherUtil.java 的部分代碼: publicpublic classclass WidgetEntity privateprivate ArrayList details = newnew ArrayList();/DetailDateWidget對象 privateprivate Integer id;/編號 privateprivate Integer updateMilis;/更新頻率 privateprivate String city;/城市 privateprivate String postalCode;/城市標記 privateprivate Long forecastDate;/預報時間 privateprivate String condition;/天氣情況 privateprivate Integer tempF;/華氏溫度 privateprivate Integer tempC;/攝氏溫度 privateprivate String humidity;/濕度 privateprivate String icon;/天氣圖標 privateprivate String windCondition;/風力風向 privateprivate Long lastUpdateTime;/最后更新時間 privateprivate Integer isConfigured;/是否已設置 從代碼中可以看出,除 DetailDateWidget 的對象 details, WidgetEntity 類中有以 上公有靜態屬性 id、updateMilis 、 updateMilis、postalCode、forecastDate、condition、 tempF、tempC、humidity、icon、windCondition、lastUpdateTime、isConfigured,完全 對應數據庫中 weather_widget 的表。 DetailDateWidget.java 的部分代碼: publicpublic classclass DetailDateWidget privateprivate Integer id;/編號 南京曉莊學院 2012 屆本科畢業論文 21 privateprivate String dayOfWeek;/星期 privateprivate Integer low;/最低溫度 privateprivate Integer hight;/最高溫度 privateprivate String icon;/天氣圖標 privateprivate String condition;/天氣

溫馨提示

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

最新文檔

評論

0/150

提交評論