吳麗淳,樊 爽
(天津財(cái)經(jīng)大學(xué)信息科學(xué)與技術(shù)系,天津 300222)
隨著社會(huì)進(jìn)程的加快,越來越多的人全身心投入繁忙的工作中而忽視了對(duì)家中老人與年幼兒童的照顧,導(dǎo)致老人在馬路上遇險(xiǎn)、兒童被拐賣的事件屢見不鮮。在這一社會(huì)背景下,大眾十分需要一種便攜、可靠的定位工具來隨時(shí)確認(rèn)以上特殊人群的位置,確保安全?;谶@一目的,本文介紹可為定位模塊提供交互服務(wù)的軟件系統(tǒng)的設(shè)計(jì)思想。選用安卓系統(tǒng)作為開發(fā)平臺(tái),結(jié)合百度地圖API提供定位、路線查詢等服務(wù),十分符合當(dāng)前的市場(chǎng)需求。
目前手機(jī)定位系統(tǒng)按提供服務(wù)的方式不同可以分為自有手機(jī)定位系統(tǒng)與公用定位系統(tǒng)2種。根據(jù)手機(jī)的不同功能可以分為短信版手機(jī)定位和WAP版手機(jī)定位。合理地使用這些定位系統(tǒng),可以給生活或者工作提供很多便利,但現(xiàn)有的系統(tǒng)需要為被定位人購買軟件所要求應(yīng)用系統(tǒng)的手機(jī),并一直開啟該手機(jī)的上網(wǎng)功能,每月還需要支付軟件定位服務(wù)費(fèi),手機(jī)的耗電量和上網(wǎng)流量都比較高,且定位精確度不高,成本不容忽視。
為了解決當(dāng)前定位系統(tǒng)存在的缺陷,本文采用北斗硬件設(shè)備代替手機(jī)提供定位支持,同時(shí)使用安卓系統(tǒng)客戶端和百度地圖API,設(shè)計(jì)制作可穿戴式的定位系統(tǒng)。本文是此系統(tǒng)軟件部分的設(shè)計(jì)介紹。
選用安卓平臺(tái),是由于其擁有巨大的客戶群和前瞻性的發(fā)展思路。谷歌公司于2005年8月收購Android公司,幫助安卓平臺(tái)走上了飛速發(fā)展的道路。根據(jù)《2013年第三季度智能手機(jī)市場(chǎng)調(diào)查》顯示,安卓手機(jī)在2013年三季度的出貨市場(chǎng)占有率達(dá)到了81.9%,較去年同期增長(zhǎng) 9.3%[1]。2013 年 11 月,Android 4.4開始面向用戶提供升級(jí)服務(wù)。除了外觀給人耳目一新的感覺外,新版系統(tǒng)在內(nèi)存、語音搜索等方面也做出提升。另一方面,同樣發(fā)布系統(tǒng)升級(jí)的IOS 7在操作控制方面向谷歌靠攏,將安卓系統(tǒng)中好的功能和特點(diǎn)融合到自己的系統(tǒng)中,這一點(diǎn)也說明了安卓系統(tǒng)的成功之處[2]。隨著 Android Wear的出現(xiàn),谷歌對(duì)新版安卓系統(tǒng)的內(nèi)存優(yōu)化,顯然是希望系統(tǒng)能更好地在智能穿戴設(shè)備上使用,為安卓智能手表提供類似耐克+FuelBand的功能,并使用自己研發(fā)的軟件占據(jù)市場(chǎng)[3]。在不斷的改革創(chuàng)新中,安卓在為廣大老客戶提供優(yōu)質(zhì)服務(wù)的同時(shí),繼續(xù)開拓潛在市場(chǎng),相信它在今后會(huì)有更好的發(fā)展。
使用百度地圖API提供地圖支持,要比谷歌地圖更易操作。另外,百度地圖提供的線路查詢、地理圍欄等技術(shù)使得系統(tǒng)開發(fā)更具新意,也更加實(shí)用。百度地圖API免費(fèi)為開發(fā)者提供一套由Java語言編寫的應(yīng)用程序接口,包括 JavaScript API、Web服務(wù) API、Android SDK、LBS云等多種開發(fā)工具與服務(wù),提供基本地圖展現(xiàn)、搜索、定位、逆地理編碼、路線規(guī)劃、LBS云存儲(chǔ)等功能,適用于PC端、移動(dòng)端、服務(wù)器等多種設(shè)備[4]。
LBS(Location-Based Services)又稱位置服務(wù),國(guó)內(nèi)外的LBS發(fā)展情況不一。從整體來看,歐洲的位置服務(wù)發(fā)展的比較先進(jìn),而其提供的服務(wù)基本以實(shí)用為主,故歐洲在增值業(yè)務(wù)的推廣方面成效不大。全球許多國(guó)家高度重視LBS的發(fā)展,而國(guó)內(nèi)的LBS市場(chǎng)相比起步較晚。2002年11月中國(guó)移動(dòng)首次開通位置服務(wù),2009年5月又開通了飛信品牌下的“位置服務(wù)”、“位置交友”等,隨后,聯(lián)通、電信也啟動(dòng)類似業(yè)務(wù)。隨著前期普及工作的深化、信息技術(shù)的發(fā)展,以及不斷完善的衛(wèi)星定位技術(shù)和地圖測(cè)繪技術(shù),地理位置信息逐步發(fā)展為民用且具備多尺度、高精度、大信息量、實(shí)用性強(qiáng)等特點(diǎn),使得LBS業(yè)務(wù)成為大眾化的服務(wù)之一。
定位軟件負(fù)責(zé)與用戶直接交互,故此界面的友好性和方便性十分重要,另外還要將用戶操作轉(zhuǎn)化為相應(yīng)命令,完成相應(yīng)服務(wù)。根據(jù)需求分析,功能設(shè)計(jì)為以下部分:
1)登錄:初始情況的登錄密碼為空,設(shè)置過密碼后,再次登錄需要輸入正確密碼才可進(jìn)入。
2)系統(tǒng)主窗體:此主窗體是程序的核心,用戶可通過主窗體大致掌握程序具有的功能,并且在完成各個(gè)模塊的操作后均可跳回主窗體。
3)位置顯示:該模塊就是把定位模塊攜帶者身處的位置在地圖上顯示出來,通過獲取定位模塊攜帶者的經(jīng)緯度信息,在地圖上查找到對(duì)應(yīng)地點(diǎn),并用點(diǎn)表示,然后在地圖上添加一個(gè)覆蓋物,表明定位模塊攜帶者所處的地點(diǎn)。
4)安全速度設(shè)定:用戶可分別設(shè)定最高速度與最低速度,當(dāng)定位模塊攜帶者的移動(dòng)速度超過設(shè)定值時(shí),用戶可收到報(bào)警提示。
5)查看與定位模塊的通訊記錄:針對(duì)在定位模塊中存放SIM卡的情況,用戶可接收其發(fā)來的短信。
6)密碼設(shè)定:已登錄的用戶可在此模塊中修改登錄密碼。
7)公交查詢:地鐵服務(wù)的附屬功能,用戶輸入城市名和公交線號(hào)碼,便可查詢公交站的分布情況。
1.2.1 登錄模塊
登錄模塊通過if((pwdDAO.getCount()==0||pwdDAO.find().getPassword().isEmpty())&&txtlogin.getText().toString().isEmpty())比較在EditText中的信息與數(shù)據(jù)庫中存儲(chǔ)的密碼是否一致,來實(shí)現(xiàn)登錄功能。效果是:若密碼正確,則執(zhí)行{startActivity(intent);}跳轉(zhuǎn)到主功能界面,若錯(cuò)誤,則提示“輸入信息錯(cuò)誤,請(qǐng)重新輸入”。
1.2.2 系統(tǒng)主窗體
實(shí)現(xiàn)方法是創(chuàng)建網(wǎng)格視圖(GridView)對(duì)象,放置代表各個(gè)子模塊的圖像視圖和對(duì)應(yīng)的模塊標(biāo)題。單擊圖像視圖,在事件監(jiān)聽器中使用switch,case方法匹配數(shù)組腳標(biāo),在case語句中使用intent=new Intent(MainActivity.this,PositionActivity.class);startActivity(intent);方法跳轉(zhuǎn)到相應(yīng)子模塊中。
1.2.3 位置顯示
當(dāng)用戶移動(dòng)一段距離后,就會(huì)觸發(fā)onLocation-Changed()方法,在這個(gè)方法里實(shí)現(xiàn)地圖移動(dòng)以及圖層的繪制操作,從而實(shí)現(xiàn)定位效果。
在XML文件中使用了線性布局,并在其中放置一個(gè)MapView地圖顯示控件,用來顯示基礎(chǔ)地圖。在Java文件中添加位置監(jiān)聽器LocationListener,實(shí)現(xiàn)onLocationChanged()方法。當(dāng)用戶的位置發(fā)生變化,回調(diào)onLocationChanged()方法,把地圖移到自己所在位置。
在onResume()方法中用LocationManager類中的requestLocationUpdates()方法來注冊(cè)監(jiān)聽器Location-Listener,那樣就可以在程序啟動(dòng)的時(shí)候開啟定位服務(wù)。圖層覆蓋物標(biāo)注,就是地圖中的的藍(lán)色圈圈。
1.2.4 安全速度設(shè)定
2個(gè)速度的存儲(chǔ)涉及數(shù)據(jù)的存儲(chǔ)方法。在這一方面,安卓平臺(tái)主要使用SQLite Databases(使用數(shù)據(jù)庫)、External Storage(共享到外部存儲(chǔ))、Shared Preferences(以鍵值對(duì)的方式存儲(chǔ))和本程序選用的Internal Storage方式,即保存私有數(shù)據(jù)到設(shè)備內(nèi)部存儲(chǔ)。不同方法有著各自的特點(diǎn),比如數(shù)據(jù)庫方法輕量級(jí)、獨(dú)立性、跨平臺(tái),Shared Preferences存儲(chǔ)操作方便、快捷等,所以開發(fā)者應(yīng)該根據(jù)程序自身數(shù)據(jù)存儲(chǔ)的需要選擇存儲(chǔ)方式。[5]
使用Internal Storage方法,數(shù)據(jù)可寫入文件中,不僅能存儲(chǔ)到系統(tǒng)中,也可保存到如SD卡的外設(shè)。文件僅對(duì)此程序可見,其他程序不可見,若刪除此程序,存儲(chǔ)文件也會(huì)同時(shí)刪除掉。不同于使用數(shù)據(jù)庫需要建立表格、編寫SQL語言等的麻煩,不同于Shared Preferences方法只存儲(chǔ)boolean、int等基本數(shù)據(jù)類型,Internal Storage方法存儲(chǔ)更加隨意,存儲(chǔ)量也較其他方法大,缺點(diǎn)是要一次性把文件中的數(shù)據(jù)都讀取出來,處理相對(duì)困難些。但在存儲(chǔ)少量數(shù)據(jù)時(shí),其優(yōu)點(diǎn)還是明顯大于缺點(diǎn)的[6]。
存儲(chǔ)的主要代碼為:
點(diǎn)擊“當(dāng)前設(shè)置”按鈕,調(diào)用read()方法讀取文件中的存儲(chǔ)值,讀取完成后關(guān)閉文件流,用TextView的setText()方法進(jìn)行顯示。
運(yùn)行效果如圖1和圖2所示。
圖1 安全速度設(shè)定模塊
圖2 安全速度設(shè)定模塊
在TextView中輸入2個(gè)速度后單擊“設(shè)置”,2個(gè)數(shù)值便會(huì)存儲(chǔ)到文件中了,同時(shí)會(huì)顯示消息窗口,提示已設(shè)置成功(見圖1)。單擊“當(dāng)前設(shè)置”按鈕,在最低值與最高值2欄可顯示之前的設(shè)定(見圖2)。
1.2.5 查看與定位模塊的通訊記錄
這里使用Intent和URI實(shí)現(xiàn)了單擊事件發(fā)生后從主窗體直接跳轉(zhuǎn)到短信程序中。URI為通用資源標(biāo)識(shí)符Universal Resource Identifier的簡(jiǎn)稱,代表要操作的數(shù)據(jù)。關(guān)于URI類中的parse()方法,官方文檔解釋其作用為“通過解析給定的URI字符串創(chuàng)建一個(gè)URI”,由此,使用此方法可以把一個(gè)字符串解析為URI,繼而在下一方法中使用。[7]
Intent()方法的2個(gè)參數(shù),可以是跳轉(zhuǎn)的活動(dòng)名字,也可以是Intent類定義的動(dòng)作常量和數(shù)據(jù),這里使用后者。ACTION_SENDTO是短信動(dòng)作常量,數(shù)據(jù)為Uri.parse(),URI中的數(shù)據(jù)是短信的前綴 sms加上通訊電話。這里的5556為模擬器的編號(hào),在使用SIM卡時(shí)可將發(fā)信人號(hào)碼變更為其他手機(jī)號(hào)。
在主窗體中,單擊“收到的消息”按鈕便會(huì)執(zhí)行如下代碼:
運(yùn)行效果如圖3所示。
圖3 查看歷史信息模塊
“5556”代表與定位模塊通信的號(hào)碼,若后期號(hào)碼變更,修改parse的相應(yīng)參數(shù)即可跳轉(zhuǎn)到新號(hào)碼。
1.2.6 密碼設(shè)定
在設(shè)置按鈕的單擊事件監(jiān)聽器中,重寫onClick方法更新數(shù)據(jù)庫信息。自定義類PwdDAO定義了在數(shù)據(jù)庫中執(zhí)行添加密碼的操作add()和修改密碼的操作update()。對(duì)txtpwd編輯框中的文本信息進(jìn)行比對(duì)后將執(zhí)行添加或修改操作,同時(shí)toast提供消息顯示,提示密碼設(shè)置成功。主要代碼如下:
1.2.7 公交查詢
以檢索天津市公交路線662的poi為例,獲取公交路線的uid,調(diào)用方法mSearch.poiSearchInCity("天津","662");接著實(shí)現(xiàn) MySearchListener的 onGet-PoiResult,獲取該公交路線的uid,根據(jù)此uid發(fā)起公交線路檢索,使用 mSearch.busLineSearch(mCityName,curPoi.uid)方法。
最后通過實(shí)現(xiàn)MySearchListener的onGetBusDetailResult()方法,展示檢索結(jié)果并在地圖上做標(biāo)記,部分代碼如下:
運(yùn)行效果如圖4所示。
圖4 公交查詢模塊
該界面有2個(gè)編輯框,一個(gè)為輸入要查詢的城市,一個(gè)為要查詢的公交線路,單擊“開始”按鈕后,在地圖上標(biāo)識(shí)出該公交的起始點(diǎn)、線路和站名。
本文介紹一款定位軟件的開發(fā)方法。系統(tǒng)基于安卓平臺(tái)完成開發(fā),使用內(nèi)置數(shù)據(jù)庫、保存私有數(shù)據(jù)到設(shè)備內(nèi)部存儲(chǔ)、URI等方法,實(shí)現(xiàn)位置顯示、安全速度設(shè)定、通信記錄查詢、公交線路查詢和密碼設(shè)置等功能。系統(tǒng)的優(yōu)點(diǎn)是頗具創(chuàng)新性,符合用戶需求,且將傳統(tǒng)的手機(jī)提供位置信息改為使用定位模塊加SIM卡的方法。此外,利用百度地圖API進(jìn)行開發(fā),除了公交查詢,有其他LBS服務(wù)可供后期使用,這一點(diǎn)是系統(tǒng)的不足之處,也是后期繼續(xù)開發(fā)的研究方向。
[1]林政偉.安卓在華市占率每季增3%恐加劇智能手機(jī)同質(zhì)化競(jìng)爭(zhēng)[N].通信信息報(bào),2013-12-11(B05).
[2]梁景裕.用戶體驗(yàn)大不同?IOS、Android、Windows系統(tǒng)升級(jí)全面看[J].消費(fèi)電子,2013(12):55-61.
[3]張勇.谷歌推出可穿戴設(shè)備專用系統(tǒng)AndroidWear.CSDN[DB/OL].http://www.csdn.net/article/2014-03-19/2818829,2014-03-19.
[4]張燕丘.Android手機(jī)定位與地圖設(shè)計(jì)與實(shí)現(xiàn)[D].長(zhǎng)春:吉林大學(xué),2013.
[5]孫更新,邵長(zhǎng)恒,賓晟,等.Android入門到精通[M].北京:電子工業(yè)出版社,2011.
[6]王國(guó)輝,李偉.Android開發(fā)寶典[M].北京:機(jī)械工業(yè)出版社,2012.
[7]Android.Android.Uri[DB/OL].http://developer.android.com/reference/android/net/Uri.html,2014-04-18.
[8]崔和宏.移動(dòng)定位技術(shù)概述[J].科技信息,2008(20):19-23.
[9]段琳.深入剖析Android Activity[J].中國(guó)新技術(shù)新產(chǎn)品,2011(16):33-34.
[10]公磊,周聰.基于Android的移動(dòng)終端應(yīng)用程序開發(fā)與研究[J].計(jì)算機(jī)與現(xiàn)代化,2008(8):85-89.
[11]王進(jìn).實(shí)時(shí)公交查詢系統(tǒng)的優(yōu)化設(shè)計(jì)和實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2013.
[12]鄭邐.基于Android平臺(tái)的無線點(diǎn)菜系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].濟(jì)南:山東大學(xué),2012.
[13]張雪英,申琪君,龍毅.網(wǎng)絡(luò)地圖評(píng)價(jià)指標(biāo)體系及其應(yīng)用[J].地球信息科學(xué),2009,11(3):355-362.
[14]鄭穎.常用移動(dòng)定位技術(shù)的研究和應(yīng)用[J].通信技術(shù),2001(8):79-81.
[15]李洪力,楊華,張婷.北斗衛(wèi)星導(dǎo)航系統(tǒng)市場(chǎng)應(yīng)用分析研究[J].電子世界,2014(1):16-17.
[16]方勝.基于Android的車載移動(dòng)終端系統(tǒng)的硏究與開發(fā)[D].廣州:廣東工業(yè)大學(xué),2012.