版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
PAGE37基于Android系統(tǒng)的手機地圖應(yīng)用軟件開發(fā)PAGE36Android手機地圖應(yīng)用軟件開發(fā)設(shè)計方案目錄摘要……………………Ⅰ1緒論………………………11.1選題背景和意義…………………11.2安卓發(fā)展歷史……………………21.3安卓與主流手機系統(tǒng)……………31.4本文主體結(jié)構(gòu)……………………42安卓系統(tǒng)簡介……………62.1安卓SDK…………62.1.1AndroidSDK內(nèi)容…………62.1.2AndroidAPI核心包分析…………………62.1.3AndroidSDK提供的工具包………………72.2安卓系統(tǒng)的應(yīng)用程序組成………82.2.1Activity…………………82.2.2BroadcastIntentReceiver…………82.2.3Service……………………82.2.4ContentProvider…………82.3安卓系統(tǒng)的應(yīng)用程序體系結(jié)構(gòu)…………………93開發(fā)工具及系統(tǒng)環(huán)境搭建………………103.1開發(fā)工具簡介……………………103.2開發(fā)環(huán)境搭建……………………103.3虛擬機簡介………………………114安卓系統(tǒng)手機地圖設(shè)計…………………134.1開發(fā)方法及步驟…………………134.2設(shè)計理念…………134.3功能需求分析……………………144.4系統(tǒng)模塊分析……………………144.5程序流程圖………………………154.5.1應(yīng)用程序流程跳轉(zhuǎn)………164.5.2應(yīng)用程序流程跳轉(zhuǎn)及Activity分析…………………165手機地圖應(yīng)用軟件的實現(xiàn)………………185.1程序主界面………………………195.2程序主界面的實現(xiàn)………………195.3我的地圖功能實現(xiàn)………………225.4實時定位功能實現(xiàn)………………255.5繪制圖形功能實現(xiàn)………………275.6地圖標記功能實現(xiàn)………………285.7地點搜索功能實現(xiàn)………………295.8公交查詢功能實現(xiàn)………………315.9離線地圖功能實現(xiàn)………………326結(jié)束語……………………346.1總結(jié)………………346.2展望………………34參考文獻……………………36附錄…………………………37摘要隨著日異月新的科技發(fā)展,人們的生活越來越豐富多彩。我們已經(jīng)身處信息爆炸以及知識經(jīng)濟繁榮的世界。這樣的潮流同時帶動了移動設(shè)備的迅猛發(fā)展,其中智能手機大有作為。而安卓操作系統(tǒng)正是現(xiàn)今智能手機上最為流行,最為開放,最有可能統(tǒng)治智能手機市場的一種功能強大的系統(tǒng)。本文通過介紹安卓系統(tǒng)的歷史淵源,體系結(jié)構(gòu)以及同各大主流手機操作系統(tǒng)的對比,指出安卓系統(tǒng)能獨樹一幟,統(tǒng)領(lǐng)手機市場的必然性。本文還全面展示了用Eclipse開發(fā)工具開發(fā)手機應(yīng)用軟件的方法,介紹了例如Activity,Intent,Service以及ContentProvider等基礎(chǔ)概念,分析了安卓應(yīng)用程序的目錄結(jié)構(gòu),基本組件以及數(shù)據(jù)存取等。在這些基本概念的理解之上,本文還詳盡介紹了手機地圖開發(fā)的步驟和實現(xiàn)機制。通過百度公司提供的API,獲取其地圖密鑰,結(jié)合幫助文檔,實現(xiàn)了地圖的定位,路線繪制以及標記等基本功能。文章最后全面展示了此款手機地圖應(yīng)用軟件的系統(tǒng)界面,調(diào)試結(jié)果以及各大功能,從而說明前期設(shè)計理念和方法的正確性和可行性。關(guān)鍵詞:安卓,智能手機,定位,地圖
1緒論1.1選題背景和意義萊特發(fā)明飛機的前200年,人們都說那種在天上飛翔的機械根本不可能實現(xiàn),同樣,人們也無法想象貝爾發(fā)明的電話最終會演變成現(xiàn)在的移動電話。進入3G時代的人們,早就不能滿足于用手機打電話或者發(fā)短信,現(xiàn)在的手機已經(jīng)成為我們不可缺少的娛樂工具,閑暇之余,我們用手機看電影,聽音樂,看電子書,和家人視頻聊天,我們甚至用手機網(wǎng)上購物,把手機充當(dāng)支付工具。這些強大的功能是一般手機系統(tǒng)或是非智能手機所不能實現(xiàn)的。軟件的實現(xiàn)需要硬件的支持才能完成,所以要實現(xiàn)以上功能,必須是以硬件同等發(fā)展為前提的。而近些年,人們就可以切身體會到硬件的變化,手機內(nèi)存卡容量的不斷增大,電阻屏向多點式電容屏的轉(zhuǎn)變,還有各種芯片運算速率的不斷加快,攝像頭像素的不斷細化,使得上述需求得到更有利的滿足。正是在這樣的背景之下,谷歌公司在2005年推出了第一代安卓智能手機操作系統(tǒng)。經(jīng)過8年的發(fā)展,我們驚奇的發(fā)現(xiàn),如今在電腦上流行的社交,娛樂等應(yīng)用程序,可以同樣的在安卓手機上運行,所以,當(dāng)電腦上的應(yīng)用軟件更新的時候,也意味著你的手機應(yīng)用軟件需要更新了。于是,人們終于感受到“PC機最終會手機化,而手機終將會PC機化”這種預(yù)言,這并不是一種矛盾,而是信息革命前行之路上的必然,只有更滿足人們使用習(xí)慣,使用快捷方便的形式和工具才能不被淘汰,繼續(xù)發(fā)展,“優(yōu)勝劣汰”在這里同樣適用。手機地圖應(yīng)用軟件正是一款滿足人們需求的軟件,通過它,人們不僅能隨時隨地知道自己的位置,還能方便的查詢附近的餐館,商店以及汽車站等信息,大大地改善了我們的生活質(zhì)量。而在幾十年前,對于個人開發(fā)者來說,要開發(fā)一款手機地圖幾乎不太現(xiàn)實,因為在當(dāng)時,手機開發(fā)者要實現(xiàn)地圖服務(wù),大多數(shù)需要GPS傳感器支持,與此同時還要支付某些地圖所有者相關(guān)費用。而如今,只需要申請簡單的密鑰,程序員就可以輕松免費地調(diào)用谷歌或者百度等大型公司的地圖服務(wù),而在安卓系統(tǒng)上,開發(fā)地圖也不再需要直接控制GPS,而是基于Web上的開發(fā)。這樣,不僅省去了和地圖開發(fā)商溝通的人力物力,而且使程序員能更有效、更集中在軟件開發(fā)本身。因此,基于安卓系統(tǒng)的手機地圖應(yīng)用軟件開發(fā)是十分有意義的,它不僅能讓初學(xué)者更好的了解安卓系統(tǒng),熟悉安卓開發(fā)的完整過程,還能培養(yǎng)我們面對用戶需求,分析并解決問題的能力,加強我們分析市場,并根據(jù)市場導(dǎo)向及時有效地制定方案的洞察力,為我們不如社會,走向工作崗位提供強有力的實踐基礎(chǔ)。1.2安卓發(fā)展歷史(1)2005年Google收購了剛剛成立了22個月的Android公司。(2)2007年11月5日,以Google為首的34家公司宣布成立開放手機聯(lián)盟(OpenHandsetAlliance,簡稱OHA)。(3)2008年9月22日,美國運營商T-MobileUSA在紐約正式發(fā)布第一款Google手機——T-MobileG1。下面,將用表格的形式來說明安卓不同版本的相關(guān)變化。表1-1Android各大版本功能及相關(guān)變化Android版本號相關(guān)功能1.02.03.04.0.1AndroidMarket;網(wǎng)頁瀏覽器;照相機支持;E-mail傳輸;聲音識別;支持Wi-Fi和藍牙優(yōu)化硬件速度;支持更多屏幕分辨率;改良用戶界面;內(nèi)置相機閃光燈;改進虛擬鍵盤;支持動態(tài)界面設(shè)計僅供平板電腦使用;GoogleeBooks;GoogleTalk視訊功能;支持多核心處理器統(tǒng)一了手機和平板電腦使用的系統(tǒng),應(yīng)用會根據(jù)設(shè)備自動選擇最佳顯示方式;提升硬件性能,系統(tǒng)優(yōu)化,流暢度提升;臉部識別鎖屏;內(nèi)置流量監(jiān)控功能相關(guān)版本的截圖如圖1-1,圖1-2,圖1-3。圖1-1搭載Android2.2Froyo的GoogleNexusOne圖1-2搭載Android2.3Gingerbread的Google'sNexus圖1-3Android4.1Home界面顯示1.3安卓與主流手機系統(tǒng)當(dāng)今流行的手機系統(tǒng)中,除了Android系統(tǒng)之外,還有諾基亞的塞班系統(tǒng),蘋果公司的iOS操作系統(tǒng),微軟公司的WindowsPhone系統(tǒng)以及黑莓的RIM系統(tǒng)。下面,就這幾款軟件與Android作簡要的對比:(1)塞班系統(tǒng):Symbian系統(tǒng)是塞班公司為手機而設(shè)計的操作系統(tǒng),其優(yōu)點是在安卓出現(xiàn)之前,占有了市場份額的絕大部分,但由于缺乏新技術(shù)支持,駐足不前,導(dǎo)致用戶量驟減。塞班系統(tǒng)具有較完整的功能,并且簡單易用,對手機的內(nèi)存要求比較低,但是其反應(yīng)速度較慢,且并不利于軟件更新,為相關(guān)功能的擴展帶來不便。因此,它被淘汰成為必然。(2)iOS操作系統(tǒng):其全稱是iPhoneOS,其第三方軟件十分豐富,屏幕支持多點式觸摸,可以通過屏幕對應(yīng)用進行直接的操作,這是蘋果公司的一大創(chuàng)舉,由于其界面穩(wěn)定友好,受到了廣大用戶的喜愛。但是其缺點在于,無論從硬件還是軟件方面,蘋果公司對改操作系統(tǒng)進行了絕對的保護,完全封閉了iOS。另外一方面,蘋果的產(chǎn)品價格不菲,影響了iOS在低端市場的推廣和發(fā)展。由于Android和iOS十分相似,所以下面將用表格的形式対它們進行比較。表1-2AndroidVSiOSAndroidiOS可以在PC,MAC和Linux下開發(fā)以Linux為基礎(chǔ)Java25美元可以通過Web下載應(yīng)用程序支持FlashGoogle,ARM,高通,三星超過50000個應(yīng)用程序只能在MAC下開發(fā)以MACOS為基礎(chǔ)ObjectiveC每年99美元只能在AppStore下載應(yīng)用程序不支持FlashApple超過100000個應(yīng)用程序(3)WindowsPhone8系統(tǒng):目前WindowsPhone機型的最新版本,僅是諾基亞Lumia610采用的Tango系統(tǒng),也被稱為WP7.5系統(tǒng),但其定位低端,性能一般。AT&T版本的WindowsPhone8機型,將定位在高端機、中低端機兩個類別,且機型代號不盡相同,代號“Prodigy”的機型極有可能定位在高端機型,而代號“AC/DC”機型則被限定在中低端行列。它的開發(fā)語言是C#,有利于初學(xué)者學(xué)習(xí),但由于發(fā)布時間較晚,上市機型偏少等缺點,使得其較Android和iOS更缺乏競爭力。1.4本文主體結(jié)構(gòu)第一章介紹了應(yīng)用系統(tǒng)的開發(fā)背景和開發(fā)意義,簡要敘述了Android系統(tǒng)的發(fā)展歷史,同時深入比較了安卓系統(tǒng)同其他主流手機操作系統(tǒng)的區(qū)別。第二章詳細地介紹了安卓系統(tǒng),其中包括SDK的介紹,系統(tǒng)應(yīng)用程序的組成,系統(tǒng)應(yīng)用程序的體系結(jié)構(gòu),為以后章節(jié)的開發(fā)奠定了基礎(chǔ)。第三章首先介紹了系統(tǒng)應(yīng)用需要的開發(fā)工具——Eclipse,然后詳細的說明了開發(fā)應(yīng)用所需要搭建的環(huán)境,最后簡要介紹了虛擬機的使用方法。第四章首先介紹了手機地圖的開發(fā)方法和步驟,同時說明了開發(fā)的理念和本款軟件的優(yōu)勢。其次,分析了功能需求,初步設(shè)定了軟件所需要的基本功能。最后,把軟件合理模塊化,將系統(tǒng)的程序流程圖繪制完成。第五章首先展示了手機地圖的整體界面,然后逐一介紹了各大功能的實現(xiàn)方法,最后展現(xiàn)了調(diào)試結(jié)果。第六章總結(jié)了本文的相關(guān)工作,指出了應(yīng)用軟件的很多疏漏和需要改進的地方,對安卓系統(tǒng)應(yīng)用以及本文軟件的前景作出了展望。
2安卓系統(tǒng)簡介2.1安卓SDK學(xué)過Java的人都知道,AndroidSDK類似于JDK,它的全稱是AndroidSoftwareDevelopmentKit,即安卓系統(tǒng)的軟件開發(fā)工具包。這個開發(fā)包可以從相關(guān)網(wǎng)址經(jīng)行下載,其中,官方版網(wǎng)址為/sdk/index.html。AndroidSDK管理器提供了3個平臺的版本:Windows、Linux(i386)和MacOSX(Intel),下載時可以根據(jù)目標平臺選擇相應(yīng)的SDK進行下載。2.1.1AndroidSDK內(nèi)容打開下載并安裝好的SDK,可以看到文件夾中含有如圖2-1所示的一些子文件夾。圖2-1SDK包含的文件下面就這些文件作簡要的介紹[1]:(1)docs文件夾中包含的是完整的AndroidSDK參考文檔,包括SDK發(fā)布的歷史信息(主要包括該版本的亮點和與上一版本的API差異報告)、開發(fā)引導(dǎo)和API參考。(2)tools文件夾中存放的是SDK附帶的Android平臺的公用工具,如Android模擬器、SQLite數(shù)據(jù)庫工具等。(3)platform-tools文件夾中存放的是與平臺有關(guān)的工具,如調(diào)試橋接工具、Dalvik字節(jié)碼轉(zhuǎn)換工具、Android資源打包工具等。(4)samples文件夾中存放的是相關(guān)的開發(fā)實例,初級開發(fā)者可以通過這些實例代碼更好地理解安卓應(yīng)用程序的實現(xiàn)過程。2.1.2AndroidAPI核心包分析從安裝系統(tǒng)平臺的最底層到最高層的基本核心API包有如下[2-3]:(1)Android.util:包含一些底層輔助類,例如,特定的容器類、XML輔助工具類等。(2)Android.os:提供基本的操作服務(wù),消息傳遞和進程間通信IPC。(3)Android.graphics:作為核心渲染包,提供圖形渲染功能。(4)Android.text、Android.text.method、Android.test.style、Android.test.util:提供一套豐富的文本處理工具,支持富文本,輸入模式等。(5)Android.database:包含底層API處理數(shù)據(jù)庫,方便操作數(shù)據(jù)庫表和數(shù)據(jù)。(6)Android.content:提供各種服務(wù)訪問數(shù)據(jù)在手機設(shè)備上,程序安裝到手機設(shè)備和其他的相關(guān)資源,以及內(nèi)容提供展示動態(tài)數(shù)據(jù)。(7)Android.view:核心用戶界面框架。(8)Android.widget:提供標準用戶界面元素,list(列表),button(按鈕),layoutmanagers(布局管理器)等,以上是組成我們界面的基本元素。(9)Android.app:提供高層應(yīng)用程序模型,實現(xiàn)使用Activity。(10)Avide:提供方便調(diào)用系統(tǒng)提供的contentproviders的接口。(11)Android.telephony:提供API系統(tǒng)交互和手機設(shè)備的通話接口。(12)Android.webikit:包含一系列工作在基于web內(nèi)容的API。除了以上面介紹的這些核心包外,Android還提供了一些可選的API,如:GPS的API-LBS定位服務(wù)(Location-BasedService),可以通過集成的GPS芯片來接收衛(wèi)星信號,從而確定手機的位置;多媒體接口(MediaAPIs)Android平臺集成了很多影音解碼器及相關(guān)的多媒體API,通過這些可選的API,開發(fā)者可以讓手機支持MP3、MP4、高清晰視頻播放等;圖形處理API,Android平臺上的游戲娛樂功能,可以支持3D游戲;低級硬件訪問,這個功能主要用于控制手機的底層方面操作[4]。2.1.3AndroidSDK提供的工具包Google公司為Android開發(fā)平臺提供Android模擬器和Eclipse的Android開發(fā)工具插件,AndroidSDK也包含了各種在模擬器用于調(diào)試、打包和安裝的工具,其針對不同的使用場景,能帶來很多便利[5]。(1)Android系統(tǒng)模擬器(AndroidEmulator):一個運行在計算機上的虛擬移動模擬器,可以使用模擬器在一個實際的Android運行環(huán)境下設(shè)計,調(diào)試和測試用戶的應(yīng)用程序。(2)集成開發(fā)環(huán)境插件:用于Eclipse集成開發(fā)環(huán)境的Android系統(tǒng)應(yīng)用開發(fā)工具插件,它為Eclipse集成開發(fā)環(huán)境增加了強大的功能,使得創(chuàng)建和調(diào)試Android應(yīng)用程序更加簡單和快速。(3)調(diào)試系統(tǒng)監(jiān)視服務(wù):它集成在Dalvik(Android平臺的虛擬機)中,用于管理運行在模擬器或設(shè)備上的進程,并協(xié)助進行調(diào)試。可以用它來去除進程、選擇一個特定程序來調(diào)試、生產(chǎn)跟蹤數(shù)據(jù)、查看堆和線程數(shù)據(jù)、對模擬器或設(shè)備進行屏幕快照等。(4)Android系統(tǒng)調(diào)試橋:它用于向模擬器或手機設(shè)備安裝應(yīng)用程序的Apk文件和從命令行訪問模擬器或手機設(shè)備。也可以用于將標準的調(diào)試器連接到運行在Android模擬器或手機設(shè)備上的應(yīng)用代碼。2.2安卓系統(tǒng)的應(yīng)用程序組成開發(fā)安卓系統(tǒng)應(yīng)用程序之前,了解其組成是十分重要的,幾乎所有的應(yīng)用程序都包含如下幾個方面的內(nèi)容:Activity、BroadcastIntentReceive、Service、ContentProvider。當(dāng)然,在某些特殊情況,取上述四大部分的三大部分內(nèi)容便可完成一個完整的應(yīng)用程序開發(fā)。2.2.1Activity首先,必須弄清楚Activity的具體含義。其實,Activity相當(dāng)于一個應(yīng)用程序的門面,也即一個屏幕就是一個Activity。每個Activity有序的組合、跳轉(zhuǎn)便構(gòu)成了一個應(yīng)用程序。每個Activity都有相應(yīng)的生命周期,分別是產(chǎn)生、運行和銷毀。在Android系統(tǒng)中為了在各個Activity之間進行跳轉(zhuǎn)可以使用Intent,Intent中兩個最重要的部分是Intent的動作(Action)和動作對應(yīng)的數(shù)據(jù)(data)[6]。此外還有一個IntentFilter類,它與Intent有著密切的關(guān)系,IntentFilter類是用來描述Intent請求的,如果有一個Intent的有效請求,那么IntentFilter就會被用來描述一個Activity操縱那個Intent。2.2.2BroadcastIntentReceiver顧名思義,這是一種事件響應(yīng)的機制,即對程序的某種指令做出響應(yīng),并通知其他應(yīng)用程序。有些BroadcastIntentReceiver需要在AndroidManifest.xml文件中注冊以后才能被系統(tǒng)執(zhí)行,但有些在系統(tǒng)開啟的時候會自動執(zhí)行。這是一種很重要的響應(yīng)機制,它使得應(yīng)用程序有了動態(tài)和廣播的特性。2.2.3ServiceService是用來處理耗時比較長的操作,它不同于Activity,它是一個應(yīng)用程序組件,沒有圖形化的界面,不是一個單獨的進程。正如字面意思一樣,它類似于一個后臺服務(wù)者。在安卓系統(tǒng)中,啟動一個Service的方法是調(diào)用StartService(Intentservice)方法,啟動之后就可以控制后臺程序的運行了。2.2.4ContentProviderContentProvider是一個強大的獲取數(shù)據(jù)和存儲數(shù)據(jù)的接口。如果兩個應(yīng)用程序需要交換數(shù)據(jù),ContentProvider是必不可少的。用ContentProvider的好處在于,外界可以通過這個接口方便地對數(shù)據(jù)進行增,刪,改,查操作。常用的接口有:(1)query(Uri,String[],String[],String):通過關(guān)鍵字查詢數(shù)據(jù)[5-8]。(2)insert(Uri,ContentValues):將一組數(shù)據(jù)插入到指定的地方。(3)update(Uri,ContentValues,String,String[]):更新數(shù)據(jù)。(4)delete(Uri,String,String[]):刪除數(shù)據(jù)。2.3安卓系統(tǒng)的應(yīng)用程序體系結(jié)構(gòu)要了解安卓系統(tǒng)的應(yīng)用程序體系結(jié)構(gòu),首先需要明白其基礎(chǔ)框架結(jié)構(gòu)。圖2-2為Google官方網(wǎng)站提供的一張安卓的體系結(jié)構(gòu)圖。圖2-2安卓系統(tǒng)體系結(jié)構(gòu)圖由這張圖可以知道,軟件的結(jié)構(gòu)從下往上依次是:(1)基于Linux內(nèi)核的操作系統(tǒng):它包括了一些顯示器的驅(qū)動程序、照相機的驅(qū)動程序以及閃存的驅(qū)動程序等等。(2)庫和運行時環(huán)境:庫中包括一些程序包,大多數(shù)是用C或C++編寫并封裝的;安卓的運行時環(huán)境和Java的類似,包括了核心包、開發(fā)中常用的類庫(如IO,Utility等類)、一個針對手機優(yōu)化過的虛擬機。(3)應(yīng)用程序框架:提供了一些手機開發(fā)最基本的API,程序員開發(fā)工作主要是基于這個框架之上的。(4)應(yīng)用程序:程序員開發(fā)的程序便在這個層上。
3開發(fā)工具及系統(tǒng)環(huán)境搭建3.1開發(fā)工具簡介學(xué)過Java的人都用過Eclipse,這是一款功能強大的軟件,是一個開放源代碼的、基于Java的可擴展開發(fā)平臺。就其本身而言,它只是一個框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。另外,Eclipse附帶了一個標準的插件集,最新的版本還附帶了ADT等開發(fā)工具。Eclipse官方下載網(wǎng)站是:/downloads/。圖3-1為其界面。圖3-1Eclipse界面從這張圖便可以看出,Eclipse是一款界面友好的開發(fā)軟件,它強大的功能使得程序員不用花費大量時間和精力在語法上,這樣有利于節(jié)約時間,提高開發(fā)效率。因此,Eclipse越來越受開發(fā)者的青睞。3.2開發(fā)環(huán)境搭建本文的開發(fā)環(huán)境為Windows7,為開發(fā)安裝的相關(guān)軟件包括Eclipse最新版、AndroidSDK、JDK1.6。下面簡要介紹環(huán)境搭建的一般步驟:(1)JDK的下載:官方網(wǎng)站/technetwork/java/javase/downloads/index.html。安裝好JDK后,有一個細節(jié)需要注意,那就是環(huán)境變量的更改。鼠標右擊“我的電腦”,選擇“屬性”,在彈出的對話框中選擇“高級系統(tǒng)設(shè)置”,再在彈出對話框選擇“環(huán)境變量”,接下來你就可以設(shè)置相關(guān)路徑了。(2)安裝Eclipse。下載完成后,一般是以壓縮包的形式呈現(xiàn)在用戶面前,只要解壓縮就可以使用了。第一次開啟Eclipse最好設(shè)定一個統(tǒng)一的工作路徑,這樣有利于以后的開發(fā)工作。(3)安裝AndroidSDK。下載網(wǎng)址為:/sdk/index.html。要特別注意,新版的SDK已經(jīng)包括以下內(nèi)容:Eclipse+ADTplugin、AndroidSDKTools、AndroidPlatform-tools、ThelatestAndroidplatform、ThelatestAndroidsystemimagefortheemulator。所以本文介紹的很多工具的下載和安裝方法應(yīng)該合理進行參考。(4)安裝ADT。ADT是Google為Android開發(fā)者提供的一個開發(fā)Android應(yīng)用程序的Eclipse插件,開發(fā)者通過ADT可以方便的穿件Android項目,創(chuàng)建應(yīng)用程序界面,在基于Android框架API的基礎(chǔ)上添加組件,以及用SDK工具調(diào)試應(yīng)用程序,甚至導(dǎo)出簽名的APKs以便發(fā)行應(yīng)用程序。ADT有兩種安裝形式,一種是在線安裝,另一種是先下載ADT,在來安裝ADT。本文選擇先下載ADT后再進行安裝。3.3虛擬機簡介安卓系統(tǒng)虛擬設(shè)備(AndroidVirtualDevice)簡稱AVD。是專門為安卓開發(fā)而構(gòu)建的一個安卓模擬器,圖3-2為其界面。圖3-2AVD界面由于最新版的Eclipse是自帶ADT的,程序員的主要任務(wù)是設(shè)置虛擬機的相關(guān)參數(shù)。在Eclipse中點擊AndroidVirtualDeviceManager,在彈出的對話框中選擇New,在彈出的對話框中輸入一個AVDName,選擇Device、Target、CPU/ABT的種類,SDCard的容量選擇250M便足夠開發(fā)使用,單擊“OK”完成創(chuàng)建。每個AVD模擬了一套虛擬設(shè)備來運行Android平臺,這個平臺至少有自己的內(nèi)核,系統(tǒng)圖像和數(shù)據(jù)分區(qū),還可以有自己的SD卡和用戶數(shù)據(jù)以及外觀顯示等。但是虛擬機有一些缺點,如它不能模擬手機的Wi-Fi功能,所以很多涉及Wi-Fi操作的功能開發(fā)不能順利進行;其次,啟動模擬器需要比較長的時間,而且它會占用比較多的資源。所以,要求開發(fā)者的個人電腦滿足主頻至少在2.5以上的CPU,2G以上的內(nèi)存空間。
4安卓系統(tǒng)手機地圖設(shè)計4.1開發(fā)方法及步驟一個應(yīng)用軟件的開發(fā)初期,絕對不能盲目的進行代碼編寫,必須先弄清楚用戶需求,計劃好軟件的總體架構(gòu),為后期的開發(fā)作指導(dǎo)。下面就具體分析安卓開發(fā)所應(yīng)具備的一般步驟[9]:(1)應(yīng)用程序功能:在應(yīng)用程序編碼之前,就應(yīng)充分考慮到用戶的需求,明確所要達到的目的,以及為了達到這些目的應(yīng)用程序應(yīng)具有的基本功能。本程序的基本功能為:記錄用戶移動線路、將軌跡顯示在Map上、地圖功能等。(2)應(yīng)用程序所需要的界面以及界面之間跳轉(zhuǎn)的流程:在這個階段應(yīng)分析應(yīng)用程序為達到目的,在實現(xiàn)功能過程中的流程,以及所需要的界面和界面之間的跳轉(zhuǎn)流程。(3)應(yīng)用程序所需要的數(shù)據(jù)及其數(shù)據(jù)的來源和格式:在這個階段應(yīng)深入分析為完成應(yīng)用程序的功能所必需具備的數(shù)據(jù),數(shù)據(jù)的格式、來源、用途以及存儲方式等。(4)應(yīng)用程序是否需要服務(wù)端支持:在這個階段需要考慮應(yīng)用程序在使用過程中是否需要服務(wù)器端的支持,如果需要應(yīng)該為其提供服務(wù)器端的支持。(5)應(yīng)用程序是否需要本地數(shù)據(jù)庫支持:在這個階段需要考慮應(yīng)用程序是否需要本地數(shù)據(jù)庫的支持,以及數(shù)據(jù)支持的方式,如果需要應(yīng)該為其提供本地數(shù)據(jù)庫的支持。(6)應(yīng)用程序是否需要特殊的權(quán)限:在這個階段需要考慮應(yīng)用程序在使用過程中的各種場景,是否有特殊場景需要特殊的權(quán)限,如果需要應(yīng)該設(shè)計權(quán)限。(7)應(yīng)用程序是否需要后臺進程:在這個階段需要考慮應(yīng)用程序的應(yīng)用方式,是否在使用過程中需要調(diào)用后臺進程,如果需要應(yīng)該為其設(shè)計合適的后臺進程。4.2設(shè)計理念在設(shè)計該應(yīng)用程序之初,就應(yīng)該分析設(shè)計該程序所能產(chǎn)生的效應(yīng),即應(yīng)用軟件所具備的優(yōu)勢?,F(xiàn)今的主流地圖軟件包括Google地圖、百度地圖、高德地圖等。這些軟件功能已經(jīng)十分強大,那么如果在功能上耗費時間和精力是沒有成效和市場的。用過這些軟件的人應(yīng)該知道,這些地圖在中高端手機上運行時沒有問題,但是面對中低端智能手機,它們的缺點就凸顯出來了,那就是運行比較緩慢甚至出現(xiàn)卡機的現(xiàn)象。所以,該款軟件的優(yōu)勢應(yīng)該在于簡易靈巧且功能完善,如果后期制作允許,還應(yīng)該致力于界面設(shè)計,因為一款界面友好的軟件往往會得到用戶的青睞。因此,本文所涉及的這款軟件旨在針對中低端智能手機市場,設(shè)計理念是盡量易于運行且功能完善,界面美觀。4.3功能模塊分析本文將實現(xiàn)一個功能比較完備的手機地圖軟件,該應(yīng)用程序可以如下功能。(1)我的地圖功能:包括截圖,設(shè)置旋轉(zhuǎn)角度,設(shè)置俯視等小功能。該功能主要為了方便用戶對地圖進行合適角度的(2)實時定位功能:這是每款軟件的基礎(chǔ)功能,也是核心功能,它能讓用戶時刻知道自己身處的位置繪制。(3)繪制圖形功能:包括點的繪制,圓形的繪制以及矩形的繪制。這樣可以方用戶進行范圍設(shè)定和相關(guān)幾何運算。(4)地圖標記功能:支持多地點的標記,用戶可以根據(jù)自己的需求對相關(guān)地點進行標識。(5)地點搜索功能:該應(yīng)用程序還具有地點搜索功能,如果輸入某一關(guān)鍵字,地圖將在市區(qū)內(nèi)搜索帶有次關(guān)鍵字的所有地點,這樣,用戶可以進行相應(yīng)的選擇。(6)公交查詢功能:為用戶提供城市部分公交路線圖。(7)離線地圖功能:為用戶提供某些城市的地圖下載,這樣,可以有效的節(jié)省用戶流量,能得到用戶的喜歡。4.4系統(tǒng)模塊分析(1)我的地圖功能模塊:其中截圖功能會把用戶所截圖片存放在默認的圖片收藏夾里,可以方便在圖庫里進行查看。另外,系統(tǒng)默認把地圖旋轉(zhuǎn)45度,俯視角為45度,當(dāng)然用戶可以根據(jù)自己的喜好自行修改旋轉(zhuǎn)角度及俯視角度。(2)實時定位功能模塊:這個功能對手機的網(wǎng)絡(luò)要求比較高,當(dāng)用戶點擊實時更新按鈕的時候,地圖會自動定位用戶所在的地點,并用藍色小圓點進行標識。(3)繪制圖形功能模塊:內(nèi)包含六個按鈕,“繪制點”,“繪制線”,“繪制矩形”,“繪制圓”,“移除矩陣”以及“清除所有”。點擊“繪制點”,系統(tǒng)將繪制一個淺藍色的小圓點;點擊“繪制線”,系統(tǒng)將繪制一條紅色的折線;點擊“繪制矩陣”,系統(tǒng)將繪制一個淺紫色的矩形框;點擊“繪制圓”,系統(tǒng)將繪制一個淺綠色的圓形。重復(fù)點擊這些按鈕,所有種類的顏色都會加深。(4)地圖標記功能模塊:該模塊具有三個按鈕——“添加標記”,“清楚一個標記”以及“清除所有”。當(dāng)點擊“添加標記”按鈕時,地圖會出現(xiàn)一個“A”字樣的紅色標識氣泡,再次點擊可以得到一個“B”字樣的紅色氣泡標識,以此類推。點擊“清除一個標記”,會清除剛才產(chǎn)生的末尾標記,持續(xù)點擊,將逆序清除標識。點擊“清除所有”,所有標識一次性清除。(5)地點搜索功能模塊:系統(tǒng)默認在“西安”市內(nèi)找“大學(xué)”,即當(dāng)用戶點擊開始按鈕時,系統(tǒng)會搜索西安市內(nèi)的所有大學(xué)。(6)公交查詢功能模塊:系統(tǒng)默認查詢“西安”市內(nèi)的“336”公交車,用戶也可以根據(jù)自己的需要輸入其他城市進行查詢。點擊“開始”按鈕,系統(tǒng)將繪制出“336”;路公交車的行駛路線。(7)離線地圖功能模塊:為用戶提供某些城市的地圖下載,這樣,可以有效的節(jié)省用戶流量,能得到用戶的喜歡。程序的系統(tǒng)模塊如圖4-1。圖4-1程序系統(tǒng)模塊4.5程序流程圖開發(fā)人員都知道,Android系統(tǒng)的應(yīng)用程序的頁面是基于Activity跳轉(zhuǎn)的,當(dāng)程序在不同的頁面之間轉(zhuǎn)換的時候,Activity也在進行著跳轉(zhuǎn),而Activity的跳轉(zhuǎn)則在代碼層帶動程序功能的實現(xiàn),因此為了順利的完成程序,必須對程序的流程和程序的頁面和Activity跳轉(zhuǎn)流程有清晰的了解。程序的流程本文將用流程圖來展示,而本程序的Activity的跳轉(zhuǎn)相對直接明了,因此只做簡要說明和分析。結(jié)合之前的設(shè)計,先用流程圖來分析整個程序的運行過程,在弄清楚運行過程之后,再用例圖來分析用戶與程序頁面的交互情況,從用例圖的交互分析來得到程序頁面的跳轉(zhuǎn)流程以及程序的Activity跳轉(zhuǎn)流程。4.5.1應(yīng)用程序流程跳轉(zhuǎn)點擊模擬器中的個人地圖程序“曉偉地圖”,程序運行后會打開一個主界面,用戶在主界面進行選擇后再進行各種操作。程序的大致框圖如圖4-2。圖4-2程序框圖4.5.2應(yīng)用程序流程跳轉(zhuǎn)以及Activity分析根據(jù)之前的程序流程分析再結(jié)合程序的功能和頁面使用用例圖分析程序的頁面跳轉(zhuǎn),程序的用例圖如圖4-3。圖4-3程序的用例分析由上圖可知,在頁面的跳轉(zhuǎn)過程中,會有四個Activity伴隨著頁面的跳轉(zhuǎn)而發(fā)生變化,分別是MyMap、MyPoi、Itemized、MarkPoi、Search、Busline、Offline七個Activity,為此應(yīng)在程序中設(shè)置Activity跳轉(zhuǎn)算法,跳轉(zhuǎn)算法如下:Intentintent=newIntent();switch(item.getItemId()){caseMENU_MYMAP:intent.setClass(XiaoMap.this,MyMap.class);startActivity(intent);returntrue;caseMENU_MYPOI:intent.setClass(XiaoMap.this,MyPoi.class);startActivity(intent);returntrue;caseMENU_ITEMIZED:intent.setClass(XiaoMap.this,Itemized.class);startActivity(intent);returntrue;caseMENU_MARKPOI:intent.setClass(XiaoMap.this,MarkPoi.class);startActivity(intent);returntrue;caseMENU_SEARCH:intent.setClass(XiaoMap.this,Search.class);startActivity(intent);returntrue;caseMENU_BUSLINE:intent.setClass(XiaoMap.this,Busline.class);startActivity(intent);returntrue;caseMENU_OFFLINE:intent.setClass(XiaoMap.this,Offline.class);startActivity(intent);returntrue;caseMENU_EXIT:finish();break;}returntrue;}
5手機地圖應(yīng)用軟件的實現(xiàn)按照之前設(shè)計好的規(guī)劃,我們將應(yīng)用程序的界面功能先實現(xiàn),再為應(yīng)用程序添加Service服務(wù)和數(shù)據(jù)的存儲服務(wù),最后將整個應(yīng)用程序的功能連接起來,完成應(yīng)用程序的開發(fā)。在本程序的開發(fā)過程中將依次實現(xiàn)下列界面以及相關(guān)的服務(wù):主界面、我的地圖界面、實時定位界面、繪制圖形界面、地圖標記界面、地圖標記界面、地點搜索界面、公交查詢界面、離線地圖界面、Service和數(shù)據(jù)庫服務(wù)、流程連接等。一個Android的應(yīng)用是由一個或者多個Activity組成的,Activity是一個UI的容器,其本身并不在用戶界面上顯示的。我們在具體編程之前,先簡單地了解一下,具體編程當(dāng)中用到的UI基本元素以及它們之間是一種什么樣的繼承結(jié)構(gòu)。在Android系統(tǒng)當(dāng)中View類是最基本的一個UI類,基本上所有的高級UI組件都是繼承View類而實現(xiàn)的,在應(yīng)用程序中所需要用到的TextView(文本框)、Button(按鈕)、List(列表)、EditText(編輯框)、RadioButton(多選按鈕)、Checkbox(選擇框)等都是View類。如圖5-1,Android系統(tǒng)的UI組件的樹形類圖。在Android系統(tǒng)中界面的生產(chǎn)有三種方式:通過在xml中配置來生成系統(tǒng)界面、用戶使用自己的界面接口來生成系統(tǒng)界面、在程序中直接通過代碼來生成系統(tǒng)界面。在本程序中通過程序中編寫代碼來進行界面布局。程序的主界面用來顯示系統(tǒng)的七大功能,在主界面上,布局文件只需要定義一個“TextView”即可,而在資源文件里,還需要添加幾個菜單,菜單的作用分別是“退出”和“關(guān)于”。圖5-1安卓系統(tǒng)UI組件的樹形結(jié)構(gòu)(1)視圖組件(View):一個視圖在屏幕上占據(jù)了一塊矩形區(qū)域,它負責(zé)渲染這塊矩形區(qū)域(如將這塊區(qū)域變成藍色或其他顏色),也可以處理這塊矩形區(qū)域發(fā)送的事件(如用戶單擊了這塊區(qū)域),并且可以設(shè)置這塊區(qū)域是否可見,是否可以獲取焦點等。(2)視圖容器組件(Viewgroup):一個視圖容器對象是一個Android.view.Viewgroup的實例。就像它的名字顯示的意義一樣,Viewgroup的作用就是View的容器,它負責(zé)對添加進Viewgroup的這些View進行布局。當(dāng)然一個Viewgroup也可以加入到另一個Viewgroup里邊,因為Viewgroup也是繼承于View.Viewgroup類,它是一個抽象類,也是其他容器類的基類。(3)布局組件:Viewgroup的實現(xiàn)類比較多,其中最重要的有兩個實現(xiàn)類,一個是LinearLayout,另一個是RelativeLayout。LinearLayout可以用來進行水平布局或者豎直布局。如果將LinearLayout的布局方向設(shè)置為“vertical”,那么表明是豎直布局。也就是說先加入進去的View會顯示在頂端,后續(xù)加入的View會顯示在底端。如果設(shè)置為“horizontal”,那么表明是水平布局,也就是從左到右依次進行排列布局。RelativeLayout負責(zé)相對布局,相識于CSS中的相對布局,例如,設(shè)置A顯示在B的左側(cè),那么的顯示坐標不是固定的,而是相對于A的位置。(4)布局參數(shù):在將每一個View加入到這個RelativeLayout里邊的時候,我們會傳遞一組值(如果沒有傳遞值,那么系統(tǒng)采用的默認值),這組值封裝在LayoutParams這個類當(dāng)中。在顯示這個View的時候,它的容器類會自動根據(jù)傳進來的LayoutParams進行計算,來確認這個View顯示的大小和位置。5.1程序主界面在Android系統(tǒng)中界面的生產(chǎn)有三種方式:通過在xml中配置來生成系統(tǒng)界面、用戶使用自己的界面接口來生成系統(tǒng)界面、在程序中直接通過代碼來生成系統(tǒng)界面。在本程序中通過在程序中編寫代碼來進行界面布局。程序的主界面用來簡單明了地顯示了系統(tǒng)的七大功能——“我的地圖”,“實時定位”,“繪制圖形”,“地圖標記”,“地點搜索”,“公交查詢”以及“離線地圖”。在主界面上需要一個標簽(TextView),還需要添加幾個菜單,菜單的作用分別是“退出”和“關(guān)于”。(1)關(guān)于按鈕:提供本軟件的相關(guān)信息。(2)退出按鈕:選擇退出按鈕,程序?qū)⒆詣油顺觥?.2程序主界面的實現(xiàn)在資源文件中,新建一個名為“MainFunction”的java文件,然后再main.xml中定義界面的相關(guān)布局。首先在res/value目錄下的strings.xml文件中添加一些需要用到的字符串的定義,代碼如下:<resources><stringname="app_name">曉偉地圖</string>//用來定義軟件名稱,這個標記會在所有的Activity中顯示。<stringname="hello_world">Helloworld!</string><stringname="menu_settings">Settings</string><stringname="title_activity_main">MainActivity</string><stringname="exit">退出</string>//用于使主界面的菜單選項為中文。 <stringname="about">關(guān)于</string> //與上句代碼的意義一致。</resources>其次,編寫main.xml中的代碼,代碼如下:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="fill_parent"http://寬度填滿父控件(整個屏幕)。android:layout_height="wrap_content"http://內(nèi)容填滿整個高度。android:orientation="vertical">//設(shè)置布局風(fēng)格為垂直布局。<TextViewandroid:text="歡迎使用曉偉地圖"http://文本文件。android:id="@+id/text_Info"http://設(shè)置文本的名字。 android:layout_width="wrap_content"android:layout_height="wrap_content"></TextView><ListViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:id="@+id/listView"android:apiKey="30AFC67C1388B437734EEF7DC58DCCC70CF6AD41"/></LinearLayout>在main.xml中,需要使用LinearLayout布局,在其中放置一個TextView組件和ListView組件,其中TextView組件用來顯示的文字引用“@string/title”,其值是“text_Info”,再增加一個id為“@+id/android:list”的ListView組件,用來顯示功能列表。系統(tǒng)會調(diào)用onCreate方法來實現(xiàn)布局的加載,顯示在列表中。為了在主界面上增加“退出”、“關(guān)于”兩個按鈕,需要程序增加方法onOptionsItemSelected(),下面給出實現(xiàn)的具體代碼:publicbooleanonCreateOptionsMenu(Menumenu){ //TODOAuto-generatedmethodstub menu.add(0,1,1,R.string.exit);//添加一個按鈕。 menu.add(0,2,2,R.string.about);//再添加一個按鈕。 returnsuper.onCreateOptionsMenu(menu); } @OverridepublicbooleanonOptionsItemSelected(MenuItemitem){ //TODOAuto-generatedmethodstub if(item.getItemId()==1){//調(diào)用的是第一個按鈕。 finish();//點擊退出按鈕時會完成退出動作。 } returnsuper.onOptionsItemSelected(item);}接著還有一個比較重要的方法onItemClick,當(dāng)單擊列表中的一個條目的時候會調(diào)用該方法,在該方法中會獲取被單擊條目的ID、Name和Desc屬性,以綁定(Bundle)的方式傳遞給下一個活動,這樣就實現(xiàn)單擊以往跟蹤記錄條目的時候會打開一個新的活動,將路徑展示在地圖上。打開Android系統(tǒng)模擬器,在模擬器運行起來后,在應(yīng)用程序選擇界面上選擇“曉偉地圖”,模擬器運行圖如圖5-2。圖5-2模擬器運行圖在程序運行起來后,進入程序的主界面,點擊模擬器右邊的“MENU”按鈕,在主界面上顯示操作按鈕。程序主界面如圖5-3。圖5-3程序主界面5.3我的地圖功能的實現(xiàn)當(dāng)在主界面上點擊“我的地圖”按鈕時,會執(zhí)行以下代碼:publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);Applicationapp=(Application)this.getApplication();if(app.mBMapManager==null){app.mBMapManager=newBMapManager(this);app.mBMapManager.init(Application.strKey,newApplication.MyGeneralListener());}setContentView(R.layout.activity_main);mMapView=(MapView)findViewById(R.id.bmapView);mMapController=mMapView.getController();//MapController用于對地圖進行多種操作方法。initMapView();//初始化mMapController.enableClick(true);mMapController.setZoom(12);//設(shè)置地圖的放大級別mMapView.setDoubleClickZooming(true);mMapView.setOnTouchListener(null);//設(shè)置監(jiān)聽器,觸發(fā)事件mMapListener=newMKMapViewListener(){ @Override publicvoidonMapMoveFinish(){ //在此處理地圖移動完成消息回調(diào) }@OverridepublicvoidonClickMapPoi(MapPoimapPoiInfo){ Stringtitle=""; if(mapPoiInfo!=null){ title=mapPoiInfo.strText; Toast.makeText(BaseMapDemo.this,title,Toast.LENGTH_SHORT).show(); mMapController.animateTo(mapPoiInfo.geoPt); }}運行此代碼后,“我的地圖”所對應(yīng)的Activity會被執(zhí)行,我們將看到如圖5-4界面。圖5-4我的地圖界面其中,截圖功能是調(diào)用onGetCurrentMap(Bitmapb)這個方法來實現(xiàn)的,最后把截取的圖片保存在"/mnt/sdcard/test"目錄下。而為了實現(xiàn)“旋轉(zhuǎn)”和“俯視”這兩個功能需要綁定連個監(jiān)聽器,部分代碼如下:OnClickListenerrotateListener=newOnClickListener(){//旋轉(zhuǎn)地圖監(jiān)聽器 publicvoidonClick(Viewv){ setMapRotateClick(); }};OnClickListeneroverlookListener=newOnClickListener(){//俯視監(jiān)聽器 publicvoidonClick(Viewv){ setMapOverlookingClick(); }}; button1=(Button)findViewById(R.id.button1); button1.setOnClickListener(captureListener); buttonRotate=(Button)findViewById(R.id.button2); buttonRotate.setOnClickListener(rotateListener); buttonOverlook=(Button)findViewById(R.id.button3); buttonOverlook.setOnClickListener(overlookListener); }privatevoidinitMapView(){mMapView.setLongClickable(true);//mMapController.setMapClickEnable(true);//mMapView.setSatellite(false);}//截圖,異步方法publicvoidcaptureMapClick(){ mMapView.getCurrentMap();}//設(shè)置地圖旋轉(zhuǎn)角度publicvoidsetMapRotateClick(){ EditTextrotate=(EditText)findViewById(R.id.rotateangle); mMapView.getController().setRotation(Integer.parseInt(rotate.getText().toString()));}//設(shè)置地圖俯視角度publicvoidsetMapOverlookingClick(){ EditTextoverlooking=(EditText)findViewById(R.id.overlookangle); mMapView.getController().setOverlooking(Integer.parseInt(overlooking.getText().toString()));}通過這些方法,就實現(xiàn)了功能所需。5.4實時定位功能的實現(xiàn)當(dāng)在主界面上點擊“實時定位”按鈕時,會執(zhí)行以下代碼:publicclassMyLocationListennerimplementsBDLocationListener{@OverridepublicvoidonReceiveLocation(BDLocationlocation){if(location==null)return;locData.latitude=location.getLatitude();locData.longitude=location.getLongitude();locData.accuracy=location.getRadius();locData.direction=location.getDerect();myLocationOverlay.setData(locData);mMapView.refresh();mMapController.animateTo(newGeoPoint((int)(locData.latitude*1e6),(int)(locData.longitude*1e6)),mHandler.obtainMessage(1));}運行完該部分代碼之后,“實時定位”所對應(yīng)的Activity會被執(zhí)行,當(dāng)然,與此同時,你需要在布局文件夾中新建一個Location.xml的布局文件,用來設(shè)計該Activity的界面,相關(guān)代碼如下:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><LinearLayoutandroid:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="wrap_content"><Button android:id="@+id/button1" android:text="實時更新" android:layout_width="fill_parent" android:layout_height="wrap_content"/></LinearLayout>由于相關(guān)代碼已經(jīng)在上述的幾個功能介紹過了,這里就不在贅述。圖5-4為運行結(jié)果。圖5-4定位功能界面5.5繪制圖形功能實現(xiàn)當(dāng)點擊“繪制圖形”按鈕時,系統(tǒng)會執(zhí)行Geometry.java文件,代碼如下:publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); Applicationapp=(Application)this.getApplication();if(app.mBMapManager==null){app.mBMapManager=newBMapManager(this);app.mBMapManager.init(Application.strKey,newApplication.MyGeneralListener());}setContentView(R.layout.activity_geometry);mMapView=(MapView)findViewById(R.id.bmapView);initMapView();mMapView.getController().setZoom(13);mMapView.getController().enableClick(true);lineButton=(Button)findViewById(R.id.button1);polygenButton=(Button)findViewById(R.id.button2);circleButton=(Button)findViewById(R.id.button3);pointButton=(Button)findViewById(R.id.button4);removeButton=(Button)findViewById(R.id.button5);clearButton=(Button)findViewById(R.id.button6);graphicsOverlay=newGraphicsOverlay(mMapView);mMapView.getOverlays().add(graphicsOverlay);lineButton.setOnClickListener(drawLineListener);polygenButton.setOnClickListener(drawPolygenListener);circleButton.setOnClickListener(drawCircleListener);pointButton.setOnClickListener(drawpointListener);removeButton.setOnClickListener(removeListener);clearButton.setOnClickListener(clearListener);}同樣的,在布局文件夾中需要新建一個Geometry.xml布局文件,用來設(shè)計該Activity的界面,這里不再重復(fù)給出相關(guān)代碼。結(jié)果如圖5-5。圖5-5繪制圖形界面5.6地圖標記功能實現(xiàn)點擊主界面里的“地圖標記”按鈕,系統(tǒng)執(zhí)行Itemized.java文件。代碼如下:publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); Applicationapp=(Application)this.getApplication();if(app.mBMapManager==null){app.mBMapManager=newBMapManager(this);app.mBMapManager.init(Application.strKey,newApplication.MyGeneralListener());}setContentView(R.layout.activity_itemizedoverlay);mMapView=(MapView)findViewById(R.id.bmapView);mMapController=mMapView.getController();initMapView();mMapView.getController().setZoom(13);mMapView.getController().enableClick(true);mMapView.setBuiltInZoomControls(true);testItemButton=(Button)findViewById(R.id.button1);removeItemButton=(Button)findViewById(R.id.button2);removeAllItemButton=(Button)findViewById(R.id.button3);}在布局文件夾中新建一個Itemized.xml布局文件,系統(tǒng)運行狀態(tài)如圖5-6。圖5-6地圖標記界面5.7地點搜索功能實現(xiàn)相比于其他功能,這個“地點搜索”功能的實現(xiàn)要復(fù)雜很多,實現(xiàn)代碼也相對較多,因此耗費了比較長的時間。此模塊主要用于實現(xiàn)兩個功能,一個是關(guān)鍵詞搜索地點,另外一個縮小搜索范圍。Applicationapp=(Application)this.getApplication();if(app.mBMapManager==null){app.mBMapManager=newBMapManager(this);app.mBMapManager.init(Application.strKey,newApplication.MyGeneralListener());}setContentView(R.layout.activity_poisearch);mMapView=(MapView)findViewById(R.id.bmapView);initMapView(); publicvoidonClickMapPoi(MapPoimapPoiInfo){ Stringtitle=""; if(mapPoiInfo!=null){ title=mapPoiInfo.strText; Toast.makeText(PoiSearchDemo.this,title,Toast.LENGTH_SHORT).show(); }}圖5-7為運行結(jié)果。圖5-7地點搜索界面5.8公交查詢功能實現(xiàn)當(dāng)點擊“公交查詢”按鈕時,系統(tǒng)會執(zhí)行以下代碼:protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); Applicationapp=(Application)this.getApplication(); if(app.mBMapManager==null){ app.mBMapManager=newBMapManager(this); app.mBMapManager.init(DemoApplication.strKey,newApplication.MyGeneralListener()); } setContentView(R.layout.buslinesearch);}運行完該代碼后,“公交查詢”所對應(yīng)的Activity會被執(zhí)行,界面如圖5-8。圖5-8公交查詢界面5.9離線地圖功能實現(xiàn)這是百度地圖的一個專屬功能,用過地圖軟件的人都知道,主流軟件中,Google地圖和高德地圖都沒有離線地圖功能,而百度地圖可以用手機直接保存各大城市的詳細地圖信息,這樣為用戶節(jié)約了大量的流量,這也是百度地圖深受青睞的原因之一。而本文的這款手機地圖也正是基于為用戶考慮的角度,借鑒了百度離線地圖功能的實現(xiàn)方法,構(gòu)造了一個下載界面。但由于這項功能的真正實現(xiàn)需要龐大數(shù)據(jù)庫的支持,作為個人開發(fā)者無從下手,因此,僅提供幾個實例作為說明。在主界面點擊“離線地圖”按鈕,會執(zhí)行如下代碼:protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState);DemoApplicationapp=(DemoApplication)this.getApplication();if(app.mBMapManager==null){app.mBMapManager=newBMapManager(this);app.mBMapManager.init(DemoApplication.strKey,newDemoApplication.MyGeneralListener());}setContentView(R.layout.activity_offline);mMapView=(MapView)findViewById(R.id.bmapView);mMapController=mMapView.getController();initMapView(); publicvoidonGetOfflineMapState(inttype,intstate){ switch(type){ caseMKOfflineMap.TYPE_DOWNLOAD_UPDATE: { //Log.d("OfflineDemo",String.format("cityid:%dupdate",state)); MKOLUpdateElementupdate=mOffline.getUpdateInfo(state); if(update!=null) mText.setText(String.format("%s:%d%%",update.cityName,update.ratio)); } break; caseMKOfflineMap.TYPE_NEW_OFFLINE: //Log.d("OfflineDemo",String.format("addofflinemapnum:%d",state)); mText.setText(String.format("新安裝%d個離線地圖",state)); break; caseMKOfflineMap.TYPE_VER_UPDATE: MKOLUpdateElemente=mOffline.getUpdateInfo(state); if(e!=null){ //Log.d("OfflineDemo",String.format("%dhasnewofflinemap:",e.cityID)); mText.setText(String.format("%s有離線地圖更新",e.cityName)); } break; }}執(zhí)行完此段代碼,系統(tǒng)會調(diào)用“離線地圖”所對應(yīng)的Activity,運行結(jié)果如圖5-8。圖5-8離線地圖界面
6結(jié)束語6.1總結(jié)隨著科學(xué)技術(shù)的不斷進步,人們的生活越發(fā)向著簡單便捷的方向發(fā)展,而快速的生活節(jié)奏使得移動設(shè)備有了更加廣闊的市場,因為它正好滿足了這樣一種時代潮流。安卓系統(tǒng)只能手機正是在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 冰箱的租賃合同范文
- 參建住宅協(xié)議書的編寫范本
- 交通銀行借款合同范本
- 房屋租賃合同終止聲明書
- 物業(yè)公司管理協(xié)議書
- 旅游合作開發(fā)合同范文點評
- 建筑勞務(wù)分包合同格式范本
- 廣東省茶葉原料采購合同模板
- 工程勞動力和施工合同示例
- 員工勞動合同續(xù)簽互用協(xié)議
- 正余弦定理知識點權(quán)威總結(jié)18頁
- 國企紀檢監(jiān)察嵌入式監(jiān)督的探索與實踐
- 淺議小升初數(shù)學(xué)教學(xué)銜接
- 設(shè)備安裝應(yīng)急救援預(yù)案
- 深基坑工程降水技術(shù)及現(xiàn)階段發(fā)展
- 暫堵壓裂技術(shù)服務(wù)方案
- 《孔乙己》公開課一等獎PPT優(yōu)秀課件
- 美的中央空調(diào)故障代碼H系列家庭中央空調(diào)(第一部分多聯(lián)機)
- 業(yè)主委員會成立流程圖
- (完整版)全usedtodo,beusedtodoing,beusedtodo辨析練習(xí)(帶答案)
- 廣聯(lián)達辦公大廈工程施工組織設(shè)計
評論
0/150
提交評論