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