宋曼
摘 要:天氣預(yù)報(bào)作為一種基礎(chǔ)服務(wù)已經(jīng)深入的融入到人們?nèi)粘I钪?,現(xiàn)在我們出行、上班、晨練、出差、旅游都離不開(kāi)天氣預(yù)報(bào)。本文提出設(shè)計(jì)一個(gè)基于Andriod技術(shù)的天氣預(yù)報(bào)APP軟件,它是一種在Andriod手機(jī)平臺(tái)運(yùn)行的非常實(shí)用的天氣信息提供軟件,使用方便且功能強(qiáng)大,能提供各方面天氣相關(guān)信息和貼心的生活指數(shù)。用戶可以通過(guò)天氣預(yù)報(bào)軟件及時(shí)獲得近期天氣的狀況和變化,及時(shí)做好各方面計(jì)劃和防御措施。
關(guān)鍵詞:Android;天氣預(yù)報(bào);APP
天氣信息和人們的日常生活息息相關(guān),隨著人們活動(dòng)范圍的擴(kuò)大和出行需要,及時(shí)精確的獲取天氣信息顯得越來(lái)越重要。為此設(shè)計(jì)了基于Andriod技術(shù)的天氣預(yù)報(bào)APP軟件,它是一種在Andriod手機(jī)平臺(tái)運(yùn)行的非常實(shí)用的天氣信息提供軟件,使用方便且功能強(qiáng)大,能提供各方面天氣相關(guān)信息和貼心的生活指數(shù)。用戶可以通過(guò)天氣預(yù)報(bào)軟件及時(shí)獲得近期天氣的狀況和變化,及時(shí)做好各方面計(jì)劃和防御措施。
一、需求分析
該天氣預(yù)報(bào)軟件中具備以下功能。
1. 可以羅列出全國(guó)所有的省、市、縣。
2. 可以查看全國(guó)任意城市的天氣信息。
3. 可以自由地切換城市,去查看其他城市的天氣。
4. 提供手動(dòng)更新以及后臺(tái)自動(dòng)更新天氣的功能。
二、天氣預(yù)報(bào)軟件的各模塊功能描述
1. 城市管理模塊
此模塊包含城市添加、刪除和查找。用戶可以通過(guò)手動(dòng)輸入,自動(dòng)定位和選擇系統(tǒng)內(nèi)置的熱門(mén)城市等方式選擇目標(biāo)城市。也可以在城市管理界面進(jìn)行城市的長(zhǎng)按刪除。
2. 顯示天氣模塊
此模塊主要完成顯示所選城市相關(guān)天氣信息,顯示未來(lái)幾天天氣預(yù)覽和一些必要的生活指數(shù)。另外用戶還可以通過(guò)系統(tǒng)內(nèi)置分享將天氣信息分享到朋友圈,微信好友和QQ好友。
3. 實(shí)景天氣模塊
此模塊中用戶可以通過(guò)拍照和從圖庫(kù)選取兩種方式選擇實(shí)景天氣圖片并上傳到服務(wù)器,還可從服務(wù)器下載實(shí)景天氣圖片并查看。
4. 用戶管理模塊
此模塊包含一整套的用戶管理解決方案,主要功能包括:注冊(cè),登錄,找回密碼,更改密碼,查看和修改用戶基本信息等功能。
5. 設(shè)置界面模塊
此模塊提供軟件相關(guān)的用戶反饋,檢查更新和關(guān)于我們。
三、天氣預(yù)報(bào)軟件各模塊功能的實(shí)現(xiàn)
1. 城市管理模塊
全國(guó)所有省市縣的數(shù)據(jù)都是從服務(wù)器端獲取到的,因此這里和服務(wù)器的交互是必不可少的,在 util 包下先增加一個(gè) HttpUtil 類(lèi)從服務(wù)器端獲取數(shù)據(jù);服務(wù)器返回的省市縣數(shù)據(jù)都是“代號(hào)|城市,代號(hào)|城市”這種格式的,因此提供一個(gè)工具類(lèi)來(lái)解析和處理這種數(shù)據(jù):在 util 包下新建一個(gè) Utility 類(lèi)做工具類(lèi)。接下來(lái)是在 res/layout 目錄中新建choose_area.xml 布局,編寫(xiě)布局文件;然后編寫(xiě)用于遍歷省市縣數(shù)據(jù)的活動(dòng):在 activity 包下新建 ChooseAreaActivity類(lèi);最后配置 AndroidManifest.xml 文件。這樣就完成了全國(guó)省市縣數(shù)據(jù)的遍歷。
2. 顯示天氣模塊
查詢(xún)天氣,并且把天氣信息顯示出來(lái)了。天氣信息應(yīng)該在一個(gè)新的界面進(jìn)行展示,因此需要?jiǎng)?chuàng)建一個(gè)新的活動(dòng)和布局文件。在 res/layout 目錄中新建 weather_layout.xml作為布局文件;在 Utility 類(lèi)中添加方法,用于解析和處理服務(wù)返回的 JSON 數(shù)據(jù);最后創(chuàng)建活動(dòng):在 activity 包下新建 WeatherActivity 繼承自 Activity。
3. 實(shí)景天氣模塊
經(jīng)過(guò)以上2個(gè)階段的開(kāi)發(fā),現(xiàn)在天氣預(yù)報(bào)軟件的主體功能已經(jīng)有了,不過(guò)你會(huì)發(fā)現(xiàn)目前存在著一個(gè)比較嚴(yán)重的 bug,就是當(dāng)你選中了某一個(gè)城市之后,就沒(méi)法再去查看其他城市的天氣了,即使退出程序,下次進(jìn)來(lái)的時(shí)候還會(huì)直接跳轉(zhuǎn)到 WeatherActivity。因此,在此模塊中將加入切換城市的功能,并且為了能夠?qū)崟r(shí)獲取到最新的天氣,將加入手動(dòng)更新天氣的功能。
首先在布局文件中加入切換城市和更新天氣的按鈕,修改布局文件 weather_layout.xml ;然后修改 WeatherActivity 中的代碼, 在 Intent 中 加 入標(biāo)志位,并添加對(duì)標(biāo)志位進(jìn)行處理的代碼,實(shí)現(xiàn)切換城市和更新天氣的功能。
4. 用戶管理模塊
為了要讓天氣預(yù)報(bào)軟件更加智能,在這個(gè)模塊加入后臺(tái)自動(dòng)更新天氣的功能,這樣可以盡可能地保證用戶每次打開(kāi)軟件時(shí)看到的都是最新的天氣信息。要想實(shí)現(xiàn)上述功能,就需要?jiǎng)?chuàng)建一個(gè)長(zhǎng)期在后臺(tái)運(yùn)行的定時(shí)任務(wù)。首先在 service 包下新建一個(gè) AutoUpdateService 繼承自
Service,在 onStartCommand()方法中先是開(kāi)啟了一個(gè)子線程,然后在子線程中調(diào)用updateWeather()方法來(lái)更新天氣,我們?nèi)匀粫?huì)將服務(wù)器返回的天氣數(shù)據(jù)交給 Utility 的handleWeatherResponse()方法去處理,這樣就可以把最新的天氣信息存儲(chǔ)到 SharedPreferences文件中。之后創(chuàng)建定時(shí)任務(wù),為了保證軟件不會(huì)消耗過(guò)多的流量,這里將時(shí)間間隔設(shè)置為 8 小時(shí),8 小時(shí)后就執(zhí)行AutoUpdateReceiver 的 onReceive()方法,在 receiver 包下新建 AutoUpdateReceiver 繼承自 BroadcastReceiver;然后修改WeatherActivity 中的代碼激活 AutoUpdateService 這個(gè)服務(wù)。最后在 AndroidManifest.xml 中注冊(cè)新增的服務(wù)和廣播接收器。這樣只要一旦選中了某個(gè)城市并成功更新天氣之后,AutoUpdateService就會(huì)一直在后臺(tái)運(yùn)行,并保證每 8 小時(shí)更新一次天氣。
5. 設(shè)置界面模塊
設(shè)計(jì)天氣預(yù)報(bào)軟件的圖標(biāo)。將這張圖片命名成 logo.png,放入 res/ drawable-hdpi 目錄,然后修改配置文件 AndroidManifest.xml中的代碼;修改程序的名稱(chēng),打開(kāi) res/values/string.xml 文件,其中 app_name 對(duì)應(yīng)的就是程序名稱(chēng)。