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