崔雪
摘 要:本設(shè)計運用開放性強的Android系統(tǒng),在智能手機端研發(fā)一款用于查詢城市天氣預(yù)報情況的APP。該天氣預(yù)報查詢系統(tǒng)界面友好,可操作性和實用性強,具有良好的可拓展性和維護性,可使用戶實時掌握當?shù)靥鞖馇闆r,方便出行和生產(chǎn)安排。經(jīng)過測試,該天氣預(yù)報查詢系統(tǒng)可穩(wěn)定運行,基本滿足用戶天氣服務(wù)需求。
關(guān)鍵詞:Android系統(tǒng);天氣預(yù)報查詢;設(shè)計
中圖分類號:TN929.53文獻標識碼:A文章編號:1003-5168(2020)29-0004-03
Abstract: This design uses the open Android system to develop an APP for querying the weather forecast of the city on the smart phone. The weather forecast query system has a friendly interface, strong operability and practicability, good scalability and maintainability, allowing users to grasp the local weather conditions in real time, facilitating travel and production arrangements. After testing, the weather forecast query system can operate stably and basically meet the needs of users for weather services.
Keywords: Android system;weather forecast enquiry;design
4G技術(shù)的廣泛應(yīng)用和5G信息大時代的到來給智能手機移動應(yīng)用開發(fā)帶來良好時機。Android系統(tǒng)是真正意義上的開源智能手機操作系統(tǒng),平臺為開發(fā)者提供了一個能自主選擇使用各種代碼搭配的寬松環(huán)境,使其不用受到強制性條件約束,催生各種新穎軟件應(yīng)用,移動應(yīng)用需求增多,也使得應(yīng)用軟件開發(fā)成為時下最熱門的技術(shù)之一。天氣預(yù)報則可以預(yù)測一地短時間內(nèi)天氣變化,和人們生產(chǎn)生活具有密切關(guān)系。在信息資源能夠高速傳輸、快速集中的網(wǎng)絡(luò)化時代,突破時空局限,優(yōu)化氣象數(shù)據(jù)資料,在自主研發(fā)天氣預(yù)報查詢客戶端上及時進行氣象信息發(fā)布,能更好滿足本地社會發(fā)展需要[1-2]。因此,基于Android系統(tǒng)的天氣預(yù)報查詢系統(tǒng)設(shè)計值得研究。
1 項目設(shè)計
1.1 總體概述
本系統(tǒng)是一個APP Widget應(yīng)用窗口小部件,在移動端主頁面調(diào)出相關(guān)程序并開始運行后,根據(jù)用戶需求自主設(shè)定目標城市,具體氣象數(shù)據(jù)信息由文字和圖片聯(lián)合進行展示,內(nèi)容包括近一周天氣預(yù)報情況,具體有溫度、風向、風速、降水情況等。該系統(tǒng)可實現(xiàn)的基礎(chǔ)性功效有:第一,將反映該APP明顯特征的歡迎界面顯示給用戶;第二,啟動APP Widget應(yīng)用程序,為凸顯人性化服務(wù),單獨將簡易實時的天氣數(shù)據(jù)和時間通過小部件顯示方式放置于移動端桌面,如果用戶單擊部件窗口,便會直接切換至查詢系統(tǒng)顯示界面,界面內(nèi)含七天內(nèi)天氣詳情;用戶可根據(jù)需要自動定位所在城市并設(shè)置常住城市,支持雙城市天氣情況小部件顯示,為使用戶翻找快捷,還支持以文本輸入框方式來篩選查詢城市,點觸屏幕選中目標城市便可切換至該城市的天氣顯示界面;第四,天氣顯示界面具體內(nèi)容包括定制城市七天天氣詳情(溫度、晴雨情況、穿衣指數(shù)、空氣質(zhì)量等),并附有公歷和農(nóng)歷對應(yīng)日期,標注傳統(tǒng)節(jié)氣和法定休假日,用戶還可通過點擊菜單鍵來更新當前天氣顯示界面背景。
1.2 設(shè)計目標
本天氣預(yù)報查詢系統(tǒng)具有較強的適用性和穩(wěn)定性,以最小成本消耗滿足廣大用戶需求。因此,本設(shè)計應(yīng)該達到以下四點要求:系統(tǒng)可實時對應(yīng)目標城市最新天氣情況;可自主選擇定制城市,通過下拉列表菜單或文本框內(nèi)輸入方式實現(xiàn);盡量消耗較少流量,以此減少用戶套餐費用支出,一般在標準間隔時段內(nèi)通過后臺自動更新天氣實況,其他時段以預(yù)先緩存的天氣實況為準;系統(tǒng)要有高用戶友好度,操作方便快捷,界面美觀大方,支持widget。
2 系統(tǒng)設(shè)計
2.1 開發(fā)和運行環(huán)境
開發(fā)環(huán)境主要包括JavaSE13(Java 語言軟件開發(fā)工具包)、Eclipse4.13(集成開發(fā)環(huán)境)、安卓開發(fā)工具包ADT Plug-in24.0.2,支持系統(tǒng)為Android7.0或更高版本,計算機端系統(tǒng)為Windows8。
2.2 數(shù)據(jù)庫設(shè)計
APP所用氣象數(shù)據(jù)資料通過調(diào)取全國氣象系統(tǒng)儲存記錄得到,因為氣象系統(tǒng)網(wǎng)絡(luò)城市碼固定,所以要將各城市碼的獲取作為得到特定城市天氣詳情的前置條件,設(shè)計思路為在構(gòu)建本系統(tǒng)數(shù)據(jù)庫時將各城市碼緩存在本地,利用Android系統(tǒng)網(wǎng)絡(luò)查詢功能將城市碼儲存在本地SQlite數(shù)據(jù)庫,以備日后隨時調(diào)取使用。在本地新建一數(shù)據(jù)庫,命名為db_weather.db,此數(shù)據(jù)庫包含provinces和cities兩個子目錄。Cities表內(nèi)含city num(城市碼),可幫助進行天氣查詢操作。此外,還有外鍵province_id和provinces表構(gòu)成一對多的匹配關(guān)聯(lián)。
2.3 主要方法和步驟
首先,進行Android開發(fā)所需體系構(gòu)建,新建一項目,命名為WeatherForecastSystem。然后,在本開發(fā)程序進行第一次試啟動運行時,從備用數(shù)據(jù)庫中將db_weather.db相關(guān)資料全部導入本程序數(shù)據(jù)庫。其次,搭建顯示界面用于選擇定制城市,系統(tǒng)自動獲取相關(guān)信息資料,找尋符合用戶搜索需求的省一級、市一級名稱和對應(yīng)城市碼,進而訪問http://m.weather.com.cn/data/<城市碼>.html,得到氣象要素數(shù)據(jù)詳情。對從網(wǎng)絡(luò)上獲取的天氣詳情進行解析翻譯,緩存氣象數(shù)據(jù)和城市碼,關(guān)聯(lián)更新日期,更新日期前數(shù)據(jù)有效,超過更新日期則數(shù)據(jù)無效,系統(tǒng)重復上述操作獲取最新天氣情況。最后設(shè)置固定時間,根據(jù)儲存城市碼自動更新操作。
2.4 運用的技術(shù)和方法
主要使用的工具如下:Mockplus手機界面原型設(shè)計工具可靈活設(shè)計特色桌面圖標,安卓系統(tǒng)Socket通信技術(shù)用于編寫客戶端代碼、安卓廣播,窗口小部件App Widgets和JSON數(shù)據(jù)解析幫助實現(xiàn)主要功能。
3 主要功能模塊設(shè)計
3.1 項目框架
在包含安卓開發(fā)工具(Android Development Tools)的Eclipse中新建一個項目,命名為WeatherForecastSystem(天氣預(yù)報系統(tǒng))。然后,在該項目內(nèi)預(yù)設(shè)多個NameSpace(標識符可見范圍)用以儲存使用者預(yù)設(shè)界面布局、數(shù)據(jù)庫、隱藏運行程序和工具實體源代碼文件。具體文件包括的內(nèi)容如表1所示。
3.2 城市列表創(chuàng)建和過濾
城市列表是通過繼承android.widget.BaseExpandableListAdapter適配器實現(xiàn)的,以實現(xiàn)其public View getGroupView()和public Void getChildView()分別獲取一級分類列表和二級分類列表為主要目的。由于此操作僅可成功實現(xiàn)文本顯示功能,相應(yīng)利用TextView組件填充便可滿足功能要求。開發(fā)者欲構(gòu)建此自定義適配器,從預(yù)先建立的省一級的Python列表和Numpy數(shù)組String[]groups及含有地級市級別子列表String[][]childs獲取數(shù)據(jù)便可。此外,為達成篩選功效,人們需要搭建android.widget.Filterable接口,此接口先配置了一個getFilter()返回Filter過濾器列表,所以仍要構(gòu)建一個Filter過濾類。在設(shè)計的天氣預(yù)報查詢系統(tǒng)中,搭建一個內(nèi)部類CityFilter,它繼承android.widget.Filter類,覆蓋操作達成兩個方法:一是performFiltering()獲取FilterResults過濾選出所需對象;二是依據(jù)獲取到的FilterResults對象更新適配器的publishResults()。
其中,performFiltering(CharSequence constraint)方法的實現(xiàn)是通過constraint關(guān)鍵字達成的。先以省一級為對標級別開始匹配操作,若匹配順利,則此省下屬全部城市會加入進來,若匹配不成功,則依序與該省份下轄城市進行核驗關(guān)聯(lián),然后匹配,此后僅加入符合匹配結(jié)果的城市。匹配結(jié)果記錄在與Map
3.3 widget窗體部件的更新
本查詢系統(tǒng)桌面小部件里附加時間顯示功能,所以窗口小部件必須順利進行實時更新,保證本程序和手機系統(tǒng)內(nèi)置時間一致。此類設(shè)計專門針對特定時間實現(xiàn)特定操作。其思路是在設(shè)計窗口小部件的更新函數(shù)方法中內(nèi)置一自動運行后臺服務(wù)項目,以此實現(xiàn)更新窗口小部件中的時鐘顯示,并且可以自動在間隔一分鐘時重復運行此后臺服務(wù)。自建一可以隱藏或最小化的運行服務(wù)類,達成該服務(wù)方法需要先啟動調(diào)出的onStart()方法,得到widget的布局對象、AppWidgetManager和城市碼并更新天氣,獲取當前時間設(shè)置,警報服務(wù)精確到秒級,間隔設(shè)置在1 min。然后,在實現(xiàn)AppWidgetProvider的widget類的更新函數(shù)方法中運行此自建服務(wù)項目。若手機用戶有取消查詢系統(tǒng)窗口小部件的需求,在刪除widget部件時,調(diào)用的后臺服務(wù)也將結(jié)束持續(xù)響應(yīng)。支持這種操作不可缺少的是實現(xiàn)Service類中的onDestory()方法,該方法在服務(wù)結(jié)束時被調(diào)出,根據(jù)此方法取消AlarManager內(nèi)置的預(yù)警功能。在widget類中的onDisabled()方法中調(diào)用stopService方法可以取消時鐘后臺自動更新的功能,其中的onDisabled方法在widget被用戶刪除時由系統(tǒng)自動調(diào)用。
自建一個Service服務(wù)后,系統(tǒng)將在清單文件AndroidManifest.xml中標明此自建服務(wù),經(jīng)過上述的設(shè)置步驟后,窗口小部件就可以達成自動更新的目的。
3.4 GPS定位功能的實現(xiàn)
查詢系統(tǒng)若想在手機端使用GPS定位功能,需要先獲取GPS定位管理器,接下來獲取位置提供程序。為精準滿足用戶需求,可利用Criteria設(shè)置對象條件篩選location provider結(jié)果,獲取最終位置提供程序后,可順利調(diào)出位置管理器對象中的getLastKnownLocation()方法,得到最后地址封裝標的。最后標的編譯處理由類創(chuàng)建對象的過程中,Geocoder將經(jīng)緯度處理為地理位置信息List對象,List對象可獲取使用者地址名。軟件開發(fā)過程中,ADT插件可實現(xiàn)為安卓模擬器指定隨意地址的功效。此外,為實現(xiàn)定位功能,還需要設(shè)置一解析XML的工具類,本系統(tǒng)主要利用LocationXMParser完成。
4 結(jié)語
天氣預(yù)報APP軟件推廣應(yīng)用后,用戶自行下載即可隨時隨地獲取實時天氣狀況,相比其他信息獲取途徑,天氣APP軟件充分利用移動互聯(lián)網(wǎng)便捷高效的傳播優(yōu)勢,能更好提醒用戶每日天氣情況,提供具體且準確的實時天氣預(yù)報及其他多元化功能服務(wù),提升了氣象服務(wù)水平。
參考文獻:
[1]姚勝.基于Android的天氣預(yù)報客戶端設(shè)計與研究[J].計算機測量與控制,2019(9):253-256.
[2]陳利婷.基于App Inventor的天氣預(yù)報系統(tǒng)的設(shè)計與實現(xiàn)[J].電腦知識與技術(shù),2019(11):81-82.