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