張波 趙雙明
摘 要:Android自發(fā)布以來(lái),憑借其開源免費(fèi)、拓展性強(qiáng)、兼容性好等優(yōu)點(diǎn)迅速占據(jù)了移動(dòng)平臺(tái)市場(chǎng)的最大份額,其免費(fèi)策略也極大地促進(jìn)了Android平臺(tái)上應(yīng)用軟件的發(fā)展。分析了Android平臺(tái)的系統(tǒng)架構(gòu),對(duì)百度地圖Android SDK及BaiDuMap API進(jìn)行了簡(jiǎn)單介紹,最后在Android平臺(tái)上實(shí)現(xiàn)了手機(jī)定位和城市搜索功能。
關(guān)鍵詞:百度地圖;定位;搜索;Android
DOIDOI:10.11907/rjdk.151632
中圖分類號(hào):TP317.4 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-7800(2015)007-0096-03
0 引言
隨著無(wú)線網(wǎng)絡(luò)技術(shù)的飛速發(fā)展和移動(dòng)終端硬件水平的不斷提高,智能手機(jī)及其各類應(yīng)用已經(jīng)成為當(dāng)今人們生活中不可或缺的工具及伙伴,尤其是Android平臺(tái)憑借其開源免費(fèi)、拓展性強(qiáng)、兼容性好等優(yōu)點(diǎn)迅速占據(jù)了移動(dòng)平臺(tái)市場(chǎng)的最大份額。以Linux內(nèi)核為基礎(chǔ)的Android操作系統(tǒng)采用分層設(shè)計(jì)的思想,平臺(tái)開放、界面友好、易于開發(fā),可謂是一種極具吸引力的開源終端解決方案?;贏ndroid平臺(tái)的各種應(yīng)用開發(fā),特別是和人們生活密切相關(guān)的位置服務(wù)應(yīng)用開發(fā)已經(jīng)成為開發(fā)者們重點(diǎn)關(guān)注的領(lǐng)域。本文分析了Android平臺(tái)的系統(tǒng)架構(gòu),對(duì)百度地圖Android SDK及BaiDuMap API進(jìn)行了簡(jiǎn)單介紹,最后結(jié)合手機(jī)定位和地市搜索功能的實(shí)現(xiàn)對(duì)百度地圖開發(fā)的基本流程進(jìn)行了闡述。
1 Android平臺(tái)系統(tǒng)架構(gòu)
Android 是一個(gè)專門針對(duì)移動(dòng)設(shè)備的軟件集,它包括一個(gè)操作系統(tǒng)、中間件和一些重要的應(yīng)用程序。其系統(tǒng)架構(gòu)采用了分層架構(gòu)的思想,如圖1所示。從上層到底層共包括4層,分別是應(yīng)用程序?qū)印?yīng)用框架層、系統(tǒng)庫(kù)和Android運(yùn)行時(shí)以及Linux內(nèi)核。
每層功能簡(jiǎn)要介紹如下:
(1)應(yīng)用程序?qū)?。該層提供一些核心?yīng)用程序包,例如電子郵件、短信、日歷、地圖、瀏覽器和聯(lián)系人管理等,這些都是使用Java語(yǔ)言編寫的。本文所講的BaiDuMap開發(fā)就是屬于這一層的應(yīng)用程序,也即是說(shuō),用戶開發(fā)的Android應(yīng)用程序及核心應(yīng)用程序是同一層次的,它們都是基于Android的系統(tǒng)API構(gòu)建的。
圖1 Android系統(tǒng)架構(gòu)
(2)應(yīng)用框架層。該層是Android開發(fā)的基礎(chǔ),開發(fā)人員可以完全訪問核心應(yīng)用程序所使用的API框架。這種架構(gòu)設(shè)計(jì)簡(jiǎn)化了組件的重用,在遵循框架安全性的前提下,任何一個(gè)應(yīng)用程序都可以發(fā)布其功能塊并且任何其它的應(yīng)用程序都可以使用其發(fā)布的功能塊。也即是說(shuō),開發(fā)者甚至可以開發(fā)新的組件以供調(diào)用。
(3)本地框架和運(yùn)行環(huán)境。這一層包含Libraries動(dòng)態(tài)庫(kù)和Android運(yùn)行時(shí)。這一層大部分采用C或C++編寫,所以也可以簡(jiǎn)單地將其看成是Native層[1]。其中Libraries動(dòng)態(tài)庫(kù)包括豐富的類庫(kù)支持,例如2D和3D圖像庫(kù)OpenGL ES、數(shù)據(jù)庫(kù)SQLite、瀏覽器引擎、媒體庫(kù)、基于Linux底層系統(tǒng)C庫(kù)等,它們通過(guò)組件為開發(fā)者服務(wù),讓應(yīng)用開發(fā)更加簡(jiǎn)單多樣。Android運(yùn)行時(shí)在Dalvik Java VM 上,Dalvik 采用簡(jiǎn)練、高效的byte code格式運(yùn)行,它能夠在低資耗和沒有應(yīng)用相互干擾的情況下并行執(zhí)行多個(gè)應(yīng)用。
(4)Linux內(nèi)核。Linux 內(nèi)核是Android的核心及基礎(chǔ),該層由C語(yǔ)言實(shí)現(xiàn),它所提供的服務(wù)包括安全機(jī)制、內(nèi)存管理、進(jìn)程管理及各類驅(qū)動(dòng),它所扮演的是位于硬件和軟件堆之間的抽象層。除了標(biāo)準(zhǔn)的Linux內(nèi)核外,Android還增加了內(nèi)核驅(qū)動(dòng),包括Binder(IPC)驅(qū)動(dòng)、顯示驅(qū)動(dòng)、輸入設(shè)備驅(qū)動(dòng)、音頻系統(tǒng)驅(qū)動(dòng)、攝像頭驅(qū)動(dòng)、WiFi驅(qū)動(dòng)、藍(lán)牙驅(qū)動(dòng)、電源管理等,并可將其理解成專為Android定制和優(yōu)化過(guò)的。
2 百度地圖 Android SDK簡(jiǎn)介
百度地圖 Android SDK是一套基于Android 2.1及以上版本設(shè)備的應(yīng)用程序接口[2]。開發(fā)者可以使用該套 SDK開發(fā)適用于Android系統(tǒng)移動(dòng)設(shè)備的地圖應(yīng)用,通過(guò)調(diào)用地圖SDK接口,輕松訪問百度地圖服務(wù)和數(shù)據(jù),構(gòu)建功能豐富、交互性強(qiáng)的地圖類應(yīng)用程序。
百度地圖Android SDK創(chuàng)建于2011年4月27日,作為地圖移動(dòng)端開發(fā)的新秀,百度地圖Android SDK率先完成了地圖矢量化,支持3D樓宇等更直觀的地圖展示效果;提出了開發(fā)包可定制化概念,用戶可按功能需求下載使用開發(fā)包,使開發(fā)更靈活、程序體積更小;實(shí)現(xiàn)了定位功能與地圖功能的分離,便于開發(fā)者更靈活地使用SDK;開放了Place詳情頁(yè)能力,能夠幫助開發(fā)者快速構(gòu)建POI詳情展示頁(yè)面;同時(shí)還支持多種地圖覆蓋物,能夠幫助開發(fā)者構(gòu)建樣式更加豐富的地圖界面。
憑借其功能全面、服務(wù)穩(wěn)定、性能優(yōu)異的特點(diǎn),百度地圖Android SDK逐漸成為市場(chǎng)上廣泛使用的LBS產(chǎn)品開發(fā)工具之一。并且隨著市場(chǎng)環(huán)境的不斷變化,百度地圖Android SDK還在不斷取得創(chuàng)新和突破。截至目前,百度地圖Android SDK已經(jīng)更新到 v3.2.0版本,調(diào)整后的SDK整體框架更加清晰合理,接口設(shè)計(jì)更符合開發(fā)者使用邏輯,并且更加人性化、規(guī)范化;在保證key鑒權(quán)安全性的同時(shí),對(duì)驗(yàn)證策略進(jìn)一步優(yōu)化,為開發(fā)者提供更安全可靠的LBS服務(wù);在檢索等性能方面,CPU占用率、內(nèi)存等方面得到全面提升;此外,還為開發(fā)者提供了更多功能及數(shù)據(jù)服務(wù)。借助這些提升,百度地圖Android SDK能夠更好地幫助開發(fā)者解決LBS應(yīng)用難題。
目前,百度地圖LBS開放平臺(tái)每天能夠響應(yīng)100億次以上的定位請(qǐng)求(http://renqi.map.baidu.com/),依托這一海量的數(shù)據(jù)資源,百度地圖能夠?qū)崿F(xiàn)在大數(shù)據(jù)領(lǐng)域的眾多創(chuàng)新,也能夠?yàn)殚_發(fā)者提供更多基于用戶需求的創(chuàng)新功能。
3 BaiDuMap API功能介紹
目前,國(guó)內(nèi)用戶使用較多的地圖API有Baidu、Google、MapABC和MapBar等多種Map API,其中又以Baidu和Google的地圖API為主,這里僅對(duì)BaiDuMap API的功能進(jìn)行簡(jiǎn)單介紹。通過(guò)查閱Map API文檔,可以知道BaiDuMap API具有如下功能,如表1所示。
綜上述,BaiDuMap API文檔完善、示例較多,便于開發(fā)者學(xué)習(xí)借鑒。對(duì)于國(guó)內(nèi)開發(fā)者而言,BaiDuMap API完全免費(fèi)、維護(hù)方便,3D效果較好,模塊分層獨(dú)立,兼容性也較好,可以滿足用戶的基本需求。
4 百度地圖定位及城市搜索開發(fā)實(shí)例
下面以編寫一個(gè)簡(jiǎn)單的定位及城市搜索程序來(lái)說(shuō)明百度地圖開發(fā)的一般步驟,這些都是在Eclipse開發(fā)環(huán)境搭建成功的基礎(chǔ)上進(jìn)行的。
4.1 程序編寫
(1)項(xiàng)目創(chuàng)建。首先,在Eclipse 下創(chuàng)建一個(gè)基于Android 4.3 版本的Android Application Project,名稱為testBaiduMap。
(2)申請(qǐng)百度API密鑰。百度地圖Android SDK提供的所有服務(wù)免費(fèi),且接口使用無(wú)次數(shù)限制。需申請(qǐng)密鑰(key)后,才可使用百度地圖Android SDK。該密鑰與用戶的百度帳戶關(guān)聯(lián),因此必須先有百度帳戶,才能獲得密鑰。并且,該密鑰與用戶引用的API程序名稱有關(guān)。具體申請(qǐng)流程可參考百度地圖API官方網(wǎng)站(http://developer.baidu.com/map/index.php?title=首頁(yè))。
(3)下載百度地圖Android SDK并導(dǎo)入。進(jìn)行百度地圖開發(fā)需要導(dǎo)入相關(guān)的Android SDK,用戶可以結(jié)合自身需求,自定義打包下載,下載地址為(http://developer.baidu.com/map/index.php?title=androidsdk/sdkandev-download),這里需要下載Android地圖SDK和Android定位SDK,將baidumapapi_v2_4_0.jar和locSDK_3.1.jar文件拷貝到工程的libs目錄下,將libbaidumapapi_v2_4_0.so和liblocSDK3.1.so文件拷貝到libs/armeabi目錄下。
(4)修改布局文件。修改res/layout/activity_main.xml 文件的內(nèi)容,在一個(gè)FrameLayout(框架布局)中,從上到下分別添加百度地圖顯示控件,并在相對(duì)布局中加入一個(gè)用來(lái)輸入城市搜索地址名稱的可編輯文本框,用來(lái)點(diǎn)擊實(shí)現(xiàn)定位和搜索,中間以豎實(shí)線隔開。
(5)設(shè)置權(quán)限及添加服務(wù)。在AndroidManifest.xml 中添加使用網(wǎng)絡(luò)功能及定位功能所需權(quán)限。
(6)實(shí)現(xiàn)定位和城市搜索功能。在主程序MainActivity.java中,實(shí)現(xiàn)定位和城市搜索功能。
4.2 運(yùn)行結(jié)果
在Eclipse中運(yùn)行程序,系統(tǒng)會(huì)啟動(dòng)一個(gè)Android模擬器,程序則運(yùn)行在模擬器上,當(dāng)然也可使用Android手機(jī)進(jìn)行調(diào)試。在這里使用手機(jī)進(jìn)行調(diào)試,結(jié)果如圖2、圖3所示。
5 結(jié)語(yǔ)
Android是當(dāng)前最受歡迎的軟件操作平臺(tái),它應(yīng)用靈活、開源免費(fèi),可以自由定制,被廣泛地應(yīng)用在手機(jī)、平板電腦等終端設(shè)備上。本文首先介紹了Android平臺(tái)的系統(tǒng)架構(gòu)和百度地圖Android SDK,對(duì)百度及谷歌兩款地圖API的優(yōu)缺點(diǎn)進(jìn)行了簡(jiǎn)單的分析比較,最后以一個(gè)百度地圖手機(jī)定位功能的實(shí)例,對(duì)百度地圖的開發(fā)流程進(jìn)行了詳細(xì)講解,緊扣目前主流技術(shù),具有較強(qiáng)的可操作性和一定的參考價(jià)值。下一步的工作是在此基礎(chǔ)上,結(jié)合用戶需求進(jìn)行拓展開發(fā),以實(shí)現(xiàn)更加個(gè)性化的應(yīng)用服務(wù)。
參考文獻(xiàn):
[1] 鄧凡平.深入理解Android:Wi-Fi、NFC和GPS卷[M].北京:機(jī)械工業(yè)出版社,2014.
[2] 百度地圖API[EB/OL].http://developer.baidu.com/map/index.php?title=androidsdk.
[3] 袁冠遠(yuǎn),羅林,劉生建. C/S架構(gòu)應(yīng)用程序集成百度地圖方案研究[J].軟件導(dǎo)刊,2014,13(1):39-42.
[4] 殷玥,劉偉,郭東恩. 基于百度地圖API的房地產(chǎn)展示系統(tǒng)的實(shí)現(xiàn)[J].軟件導(dǎo)刊,2012,11(9):163-164.
(責(zé)任編輯:黃 健)