吳林,熊滔,蔡永香
(長(zhǎng)江大學(xué)地球科學(xué)學(xué)院,湖北荊州 434023)
基于Android手機(jī)的地圖應(yīng)用設(shè)計(jì)與開發(fā)
吳林?,熊滔,蔡永香
(長(zhǎng)江大學(xué)地球科學(xué)學(xué)院,湖北荊州 434023)
介紹了Google發(fā)布的新一代智能手機(jī)平臺(tái)Android的系統(tǒng)架構(gòu),并在分析手機(jī)用戶和商家需求的基礎(chǔ)上進(jìn)行了相應(yīng)的功能設(shè)計(jì)和數(shù)據(jù)庫(kù)設(shè)計(jì),利用Google的地圖應(yīng)用接口和XML等技術(shù),實(shí)現(xiàn)了基于Android手機(jī)平臺(tái)的地圖應(yīng)用的基本功能。
Android手機(jī);地圖應(yīng)用;Google Map
隨著3G網(wǎng)絡(luò)的使用,移動(dòng)終端不再僅是通訊網(wǎng)絡(luò)的終端,還將成為互聯(lián)網(wǎng)的終端。因此,移動(dòng)終端的應(yīng)用軟件和需要的服務(wù)將會(huì)有很大的發(fā)展空間[1]。Google為此于2007年11月推出了一個(gè)專為移動(dòng)設(shè)備設(shè)計(jì)的軟件平臺(tái)——Android[4],并融合了谷歌地圖技術(shù),支持地圖服務(wù)的應(yīng)用開發(fā)。
目前的地圖服務(wù)主要以使用單機(jī)或者網(wǎng)頁(yè)方式實(shí)現(xiàn),這些方式不適合在戶外旅游等場(chǎng)合下進(jìn)行,給用戶造成了很多地不便。而手機(jī)地圖服務(wù)就能很好解決這個(gè)問(wèn)題,Android平臺(tái)提供給普通開發(fā)者非常靈活的地圖展示與控制功能,這將使地圖服務(wù)的設(shè)計(jì)與實(shí)現(xiàn)有了更好的平臺(tái)。另外,Android平臺(tái)基本上是免費(fèi)的,所以能夠有效降低軟件的成本,最終讓每個(gè)用戶能夠自由地獲取信息,也為手機(jī)地圖服務(wù)的普及作出貢獻(xiàn)[5]。
Android平臺(tái)整體自底向上由以下四個(gè)層次組成: Linux內(nèi)核層、Android運(yùn)行時(shí)庫(kù)和其他庫(kù)層、應(yīng)用框架層、應(yīng)用程序?qū)?,如圖1所示。
(1)Linux內(nèi)核層:Android基于Linux Version 2.6.23內(nèi)核開發(fā)的,主要是添加了一個(gè)名為Goldfish的虛擬CPU以及Android運(yùn)行所需的特定驅(qū)動(dòng)代碼。該層用來(lái)提供系統(tǒng)的底層服務(wù),包括安全機(jī)制、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)堆棧及一系列的驅(qū)動(dòng)模塊。作為一虛擬的中間層,該層位于硬件與其他的軟件層之間。
(2)Android運(yùn)行時(shí)庫(kù)和其他庫(kù)層:Android運(yùn)行時(shí)庫(kù)包含一組核心庫(kù)(提供了Java語(yǔ)言核心庫(kù)內(nèi)的大部分功能)和Dalvik虛擬機(jī)。同時(shí)Android提供了豐富的庫(kù)類支持且大部分為開源代碼,如采用的數(shù)據(jù)庫(kù)為SQLite。Android選擇它作為移動(dòng)終端的嵌入式數(shù)據(jù)庫(kù)有以下優(yōu)點(diǎn),它無(wú)需安裝和管理配置,它是一個(gè)存儲(chǔ)在單一磁盤文件中的完整的數(shù)據(jù)庫(kù),體積小只有250KB但支持?jǐn)?shù)據(jù)庫(kù)大小至2TB提供了對(duì)事務(wù)功能和并發(fā)處理的支持,而且比目前流行的大多數(shù)數(shù)據(jù)庫(kù)運(yùn)行速度快。
圖1 Android平臺(tái)架構(gòu)
(3)應(yīng)用框架層:在應(yīng)用框架Android開發(fā)人員可以跟那些核心應(yīng)用一樣擁有訪問(wèn)框架APIs的全部權(quán)限。應(yīng)用的系結(jié)構(gòu)化設(shè)計(jì)簡(jiǎn)化了各組件之間的重用,任何應(yīng)用都可以分發(fā)自己的組件,任何應(yīng)用也可以使用這些分發(fā)的組件(應(yīng)用的使用方法需遵循框架的安全性約束)。
(4)應(yīng)用程序?qū)?Android本身會(huì)附帶一些核心的應(yīng)用程序,包括E-mail客戶端、短信程序、日歷、地圖、瀏覽器、通訊錄等等,目前所有的應(yīng)用程序都是由Java語(yǔ)言開發(fā)的。
3.1 需求分析
手機(jī)的地圖應(yīng)用主要功能是以圖形、文字的形式為用戶提供地圖服務(wù),并提供友好、方便、快捷的操作界面。其功能需求從用戶和商家兩方面來(lái)進(jìn)行分析設(shè)計(jì),用戶方需求包括:
(1)地圖控制:能夠?qū)Φ貓D進(jìn)行放大、縮小和移動(dòng);
(2)實(shí)時(shí)定位:能夠?qū)⒂脩舢?dāng)前位置在地圖上標(biāo)注出來(lái),并能隨著位置的變化而實(shí)時(shí)更新,即在地圖上定位用戶的當(dāng)前位置;
(3)路徑導(dǎo)航:能夠根據(jù)用戶的當(dāng)前位置與目的地,為用戶規(guī)劃路徑,并在地圖上顯示,進(jìn)行實(shí)時(shí)路徑引導(dǎo);
(4)軌跡跟蹤:能夠在地圖上顯示出用戶的行駛路徑,并給出相應(yīng)的行駛距離;
(5)資訊查詢:能夠根據(jù)用戶的當(dāng)前位置,查詢用戶附近所需要的信息,比如附近的影院信息、商家信息等;
(6)好友通信:能夠在地圖上顯示出好友的位置,并能夠進(jìn)行聊天通信;
(7)日志備忘:有日志記錄功能。
所有這些需求實(shí)現(xiàn),都要求操作簡(jiǎn)單,符合手機(jī)使用者的習(xí)慣。
商家需要能夠根據(jù)用戶的位置,進(jìn)行促銷信息的廣告推送。
3.2 功能設(shè)計(jì)
手機(jī)地圖服務(wù)扮演著與用戶直接交互并提供服務(wù)的重要角色,它需要提供友好的、方便的用戶操作界面,接收用戶的各項(xiàng)操作并將這些操作轉(zhuǎn)化成與之對(duì)應(yīng)的命令,采用用戶活動(dòng)的方式完成各個(gè)服務(wù)邏輯流程。按照需求分析,其功能設(shè)計(jì)為:
(1)登陸注冊(cè)功能:已注冊(cè)用戶登錄,非注冊(cè)用戶先注冊(cè)再登錄。只有注冊(cè)并登錄的用戶才可以使用該系統(tǒng)。
(2)信息查詢功能:自動(dòng)根據(jù)該手機(jī)用戶GPS定位(沒有GPS的手機(jī)用戶可利用基站進(jìn)行模糊定位),按照用戶的位置,查詢用戶需要的附近信息。該功能讓用戶實(shí)時(shí)了解自己的具體位置和環(huán)境。
(3)路徑分析功能:用戶提供路徑分析的起始、終點(diǎn)信息,進(jìn)行分析后的結(jié)果以文本結(jié)合地圖方式進(jìn)行顯示。該功能主要為方便用戶在一個(gè)自己不熟悉的地方為用戶提供道路導(dǎo)航信息。
(4)廣告推送功能:在GPS(或者利用基站CellId判斷用戶位置)開啟情況下,當(dāng)用戶進(jìn)入某商場(chǎng)(或其他服務(wù)場(chǎng)所)附近輻射區(qū)域范圍時(shí),該商場(chǎng)將產(chǎn)品、促銷活動(dòng)的相關(guān)服務(wù)信息以短消息方式發(fā)送到該手機(jī)用戶,進(jìn)行廣告精準(zhǔn)推送。
(5)好友聊天功能:好友之間可聊天,并將附近一定區(qū)域內(nèi)的好友在地圖上定位顯示,用戶可獲取附近區(qū)域內(nèi)好友的位置信息。
(6)數(shù)據(jù)搜集功能:用戶可以上傳地標(biāo)信息、添加屬性信息,根據(jù)用戶提供的數(shù)據(jù)量多少,采取某種方式給予獎(jiǎng)勵(lì),從而為數(shù)據(jù)庫(kù)添加更多的信息。該功能還可以利用有GPS的手機(jī)用戶的定位充實(shí)我們的CellId庫(kù),從而為沒有GPS的手機(jī)用戶提供定位信息。
(7)用戶要事備忘功能,即手機(jī)記事本功能。用戶可以記錄一些重要事情以備忘。
3.3 數(shù)據(jù)庫(kù)設(shè)計(jì)
此系統(tǒng)所用數(shù)據(jù)是由Google提供的基礎(chǔ)底圖,和自己收集的道路網(wǎng)數(shù)據(jù),商場(chǎng)、影院信息組成。其中空間數(shù)據(jù)包括基礎(chǔ)底圖,道路網(wǎng)數(shù)據(jù),商場(chǎng)、影院的位置信息;屬性數(shù)據(jù)包括各種地物名稱,影院影片信息,商家的服務(wù)打折促銷信息等。
(1)數(shù)據(jù)存儲(chǔ)設(shè)計(jì)
Android提供了一些方式來(lái)存取數(shù)據(jù)。一是文件方式,數(shù)據(jù)以文件的方式存儲(chǔ)在設(shè)備或其他移動(dòng)媒介上;二是數(shù)據(jù)庫(kù)方式,Android有SQLite數(shù)據(jù)庫(kù)的API,應(yīng)用程序可以創(chuàng)建和使用SQLite數(shù)據(jù)庫(kù);三是網(wǎng)絡(luò)方式:Android還支持使用網(wǎng)絡(luò)存取數(shù)據(jù)的方式。除此以外,Android還可以向其他應(yīng)用程序請(qǐng)求并獲得數(shù)據(jù)[7]。
由于該系統(tǒng)是進(jìn)行原型設(shè)計(jì),數(shù)據(jù)量不太大,只有基礎(chǔ)底圖和少量測(cè)試數(shù)據(jù),基礎(chǔ)底圖是利用Google API獲取的Google地圖,其他測(cè)試數(shù)據(jù)均采用文件存儲(chǔ)的方式。各數(shù)據(jù)表詳情如表1所示。
數(shù)據(jù)表信息 表1
(2)數(shù)據(jù)交互設(shè)計(jì)
目前的手機(jī)平臺(tái)存在兩方面限制:
①手機(jī)的計(jì)算能力與存儲(chǔ)容量有限。
②網(wǎng)絡(luò)傳輸?shù)牟环€(wěn)定性與不安全。
因此,根據(jù)實(shí)際情況采用瘦手機(jī)客戶端、胖服務(wù)器端是比較合適的解決方案。具體如下:
客戶端:顯示界面并進(jìn)行簡(jiǎn)單計(jì)算和存儲(chǔ)少量數(shù)據(jù);
服務(wù)器端:進(jìn)行復(fù)雜的計(jì)算并進(jìn)行數(shù)據(jù)訪問(wèn),存放空間數(shù)據(jù)和復(fù)雜的屬性數(shù)據(jù);
手機(jī)與服務(wù)端數(shù)據(jù)實(shí)時(shí)交互:利用Web Service在pc服務(wù)端為手機(jī)端提供運(yùn)算與存儲(chǔ)服務(wù),而手機(jī)端軟件充當(dāng)信息終端。手機(jī)端與服務(wù)端的交互過(guò)程如圖2所示。
圖2 手機(jī)端與服務(wù)端的交互示意圖
我們采用的集成開發(fā)環(huán)境為Eclipse 3.4.1,安裝的SDK為Java Development Kit(JDK)v6.0,Android SDK 1.0r2以上,同時(shí)需要安裝集成環(huán)境的Android開發(fā)插件ADT。當(dāng)所有開發(fā)環(huán)境搭建好之后,還需申請(qǐng)Android Maps API key,并且在XML布局文件中進(jìn)行配置:
然后只需使用MapView(com.google.Andriod.maps. MapView)對(duì)象,就能調(diào)用Google地圖,并進(jìn)行應(yīng)用開發(fā)。
本系統(tǒng)基于Android手機(jī)平臺(tái),初步實(shí)現(xiàn)了地圖應(yīng)用的基本功能:地圖的瀏覽與設(shè)置、基本點(diǎn)位信息查詢、道路信息查詢與導(dǎo)航、基于地圖的QQ聊天功能、基于地圖的廣告自動(dòng)推送功能。下面是部分功能展示。
4.1 路徑導(dǎo)航的展示
路徑導(dǎo)航功能就是當(dāng)手機(jī)用戶在一個(gè)不熟悉的地方,想查詢起點(diǎn)和終點(diǎn)之間的路徑,可以用此功能完成。圖3表示從長(zhǎng)江大學(xué)西校區(qū)出發(fā)A點(diǎn),到長(zhǎng)江大學(xué)南校區(qū)的路徑導(dǎo)航,圖中實(shí)線表示的是已經(jīng)行走的軌跡,桃紅線表示的是導(dǎo)航的路徑,B點(diǎn)表示用戶現(xiàn)在所在的位置。
圖3 路徑導(dǎo)航
4.2 廣告推送的實(shí)現(xiàn)
廣告推送功能就是當(dāng)手機(jī)用戶進(jìn)入到商場(chǎng)、電影院等服務(wù)設(shè)施(黑點(diǎn)所示)的服務(wù)區(qū)時(shí),商家向手機(jī)用戶及時(shí)發(fā)送服務(wù)打折信息。這個(gè)功能不僅向手機(jī)用戶提供了深度的信息服務(wù),并能向附近的手機(jī)用戶介紹其服務(wù)信息,從而激發(fā)潛在的客戶需求。這個(gè)功能主要是通過(guò)調(diào)用LocationManager中的void addProximityAlert(double latitude,double longitude,float radius,long expiration,PendingIntent intent)方法來(lái)實(shí)現(xiàn),前兩個(gè)參數(shù)表示服務(wù)設(shè)施的經(jīng)緯度,radius表示該服務(wù)區(qū)的半徑。當(dāng)Location Manager檢測(cè)到手機(jī)用戶移入該區(qū)域時(shí),就會(huì)觸發(fā)打包的Intent,服務(wù)端會(huì)調(diào)出商家的服務(wù)信息數(shù)據(jù)通過(guò)系統(tǒng)發(fā)送給用戶,進(jìn)行廣告精準(zhǔn)推送。
圖4 廣告精準(zhǔn)推送演示圖
本文介紹了Google發(fā)布的新一代智能手機(jī)平臺(tái)Android的系統(tǒng)架構(gòu),并在分析手機(jī)用戶和商家需求的基礎(chǔ)上進(jìn)行了相應(yīng)的功能設(shè)計(jì)和數(shù)據(jù)庫(kù)設(shè)計(jì),利用Google的地圖應(yīng)用接口、XML等技術(shù),實(shí)現(xiàn)了基于Android手機(jī)平臺(tái)的地圖應(yīng)用的基本功能:地圖的瀏覽與設(shè)置、基本點(diǎn)位信息查詢、道路信息查詢與導(dǎo)航、基于地圖的QQ聊天功能、基于地圖的廣告自動(dòng)推送功能,可以滿足手機(jī)用戶基本的地圖服務(wù)需求。當(dāng)然,該技術(shù)還需要進(jìn)一步的完善,需要在日后的工作中不斷地探索和研究,以形成一套實(shí)用的地圖服務(wù)系統(tǒng)。
[1] 靳巖,姚尚朗.Android開發(fā)入門和實(shí)戰(zhàn)[M].北京:人民郵電出版社,2009
[2] 溫敏,艾麗蓉,王志國(guó).Android智能手機(jī)系統(tǒng)中文件實(shí)時(shí)監(jiān)控的研究與實(shí)現(xiàn)[J].科學(xué)技術(shù)與工程,2009,9(1): 1717~1719
[3] 張仕成.基于Google Android平臺(tái)的應(yīng)用程序開發(fā)與研究[J].電腦知識(shí)與技術(shù),2009,5(28):7959~7962
[4] 公磊,周聰.基于Android的移動(dòng)終端應(yīng)用程序開發(fā)與研究[J].計(jì)算機(jī)與現(xiàn)代化,2008(8):85~89
[5] 差沙,地獄男爵.用Android開發(fā)手機(jī)應(yīng)用[J].程序員,2008(1):56~61
[6] 舒賢華.基于Android平臺(tái)的手機(jī)Web地圖服務(wù)設(shè)計(jì)[D].大連海事大學(xué)碩士學(xué)位論文,2009
[7] 公磊.基于Android的GPS測(cè)量系統(tǒng)開發(fā)[D].南昌大學(xué)碩士學(xué)位論文,2008
[8] http://baike.baidu.com/view/1241829.htm?fr=ala0_1_1
Design and Development of Map Application Based on Android Mobile
Wu Lin,Xiong Tao,Cai YongXiang
(School of Geoscience,Yangtze University,Jingzhou 434023,China)
This paper firstly introduces the system structure of the new generation smart phones platform—Android by Google,and then analyzes the demands of mobile users and business,the functions and data storages have been designed correspondingly.Finally,using the application interfaces of Google maps and XML technology,the basic function of map applications is realized based on Android Moblie.
Android Mobile;Map application;Google Map
1672-8262(2011)02-16-04
P208
A
2010—08—29
吳林(1986—),女,碩士研究生,主要研究網(wǎng)絡(luò)地理信息系統(tǒng)。
長(zhǎng)江大學(xué)楚天學(xué)者資助項(xiàng)目(移動(dòng)GIS應(yīng)用研究,201007)