智能手機GPS功能的實現(xiàn)_第1頁
智能手機GPS功能的實現(xiàn)_第2頁
智能手機GPS功能的實現(xiàn)_第3頁
智能手機GPS功能的實現(xiàn)_第4頁
智能手機GPS功能的實現(xiàn)_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

智能GPS功能的實現(xiàn)摘要所謂的GPS是指利用GPS定位衛(wèi)星,在全球范圍內(nèi)實時進行定位、導(dǎo)航的系統(tǒng),其全稱為全球衛(wèi)星定位系統(tǒng)。在空間技術(shù)和通信技術(shù)的推動下,GPS自誕生40余年以來,得到了迅猛的開展。同時隨著智能移動終端的不斷開展,GPS技術(shù)從過去的單一設(shè)備逐步滲入到智能設(shè)備的開發(fā)上。智能GPS功能的實現(xiàn)作為GPS技術(shù)與智能技術(shù)的結(jié)合,從導(dǎo)航具有便攜性好、價格較低、永遠在線等方面來說,所以說在全球最流行的安卓智能上研制GPS導(dǎo)航系統(tǒng)是非常有意義的。論文首先概要介紹了GPS技術(shù)的開展現(xiàn)狀和前景,研究了基于基于Android平臺的移動終端GPS系統(tǒng)開發(fā)的可信性及需求分析;然后詳細闡述了Android系統(tǒng)的由來與安裝;接著在分析用戶需求的根底上,對系統(tǒng)的功能模塊進行了劃分;最后進行了具體的程序編寫以及測試工作,測試結(jié)果說明,該系統(tǒng)已能完成GPS手持終端的根本功能,在目前安卓智能普及的情況下,野外無需再專門購置設(shè)備,使用本錢大大降低,且攜帶方便,可隨時進行野外作業(yè)。因此,本系統(tǒng)有著廣闊的應(yīng)用前景。關(guān)鍵詞:GPSAndroid全球定位系統(tǒng)衛(wèi)星定位安卓智能目錄TOC\o"1-4"\h\z\u第一章緒論………………………11.1引言…………11.2研究內(nèi)容……………………11.3論文結(jié)構(gòu)安排………………2第二章Android系統(tǒng)下的軟件開發(fā)…………32.1Android系統(tǒng)簡介…………32.1.1Android的由來……………………32.1.2Android的系統(tǒng)架構(gòu)………………32.1.3Android的應(yīng)用程序開發(fā)…………42.2Android開發(fā)環(huán)境的構(gòu)建…………………42.2.2JAVAJDK的安裝…………………42.2.3Eclipse的安裝……………………62.2.4ADT的安裝…………62.2.5AndroidSDK的安裝………………6第三章系統(tǒng)分析與設(shè)計………83.1研究目標(biāo)…………………83.2需求分析…………………83.3系統(tǒng)功能設(shè)計……………8第四章系統(tǒng)實現(xiàn)………………94.1Elipse文件的結(jié)構(gòu)及功能………………94.2界面設(shè)計…………………104.3程序模塊以及功能設(shè)計…………………104.3.1程序模塊介紹……………………104.3.2程序模塊的功能…………………104.4主要功能的實現(xiàn)…………11獲得GoogleMapAPIKey………124.4.2布局及按鈕的設(shè)置………………144.4.3配置窗體部件字符串文件………15關(guān)于應(yīng)用配置及聲明的設(shè)置……154.4.5主程序框架介紹…………………16地圖放大縮小的相關(guān)操作…………………17對衛(wèi)星視圖的相關(guān)設(shè)定……18對坐標(biāo)顯示區(qū)域的設(shè)置……18第五章系統(tǒng)測試………………19結(jié)論………………23致謝………………24參考文獻…………25第一章緒論1.1引言GPS是英文GlobalPositioningSystem〔全球定位系統(tǒng)〕的簡稱,最早它是20世紀(jì)70年代由美國陸??杖娐?lián)合研制的空間衛(wèi)星導(dǎo)航定位系統(tǒng)。其主要目的是為陸、海、空三大領(lǐng)域提供實時、全天候和全球性的導(dǎo)航效勞,并用于情報收集、核爆監(jiān)測和應(yīng)急通訊等一些軍事目的,經(jīng)過40余年的研究實驗,GPS技術(shù)的運用已去向平民化,且日益成熟。由于GPS系統(tǒng)所具有的全天候,高精度,和自動測量的特點,作為先進的測量手段和新的生產(chǎn)力,已經(jīng)融入到了國民經(jīng)濟建設(shè),國防建設(shè)和社會開展的各個應(yīng)用領(lǐng)域。其運用提高了生產(chǎn)力,作業(yè)效率,科學(xué)水平以及人們生活質(zhì)量,因此可以說GPS技術(shù)在經(jīng)濟全球化的今天起著舉足輕重的作用,而且可以預(yù)見的是全球定位技術(shù)對于人們的生活也將越來越凸顯它的重要性,人們的生活也將越來越離不開它的存在。目前,全球共有四種全球定位系統(tǒng),包括美國的GPS,俄羅斯的格洛納斯,歐洲的伽利略和中國的北斗,相比擬而言,美國的GPS全球定位系統(tǒng)組建的最早,技術(shù)也最為成熟,但由我國自主研發(fā)的北斗定位系統(tǒng)也毫不遜色。北斗衛(wèi)星導(dǎo)航系統(tǒng)是中國自行研制開發(fā)的區(qū)域性有源三維衛(wèi)星定位,可在全球范圍內(nèi)全天候、全天時為各類用戶提供高精度、高可靠的定位、導(dǎo)航、授時效勞[1]。可以說,上至航空航天,下至工業(yè)、漁業(yè)、農(nóng)業(yè)生產(chǎn)和日常生活,全球衛(wèi)星導(dǎo)航定位技術(shù)無所不在。正如人們所說的:“全球衛(wèi)星導(dǎo)航系統(tǒng)的應(yīng)用,僅受人類想象力的制約?!?.2研究內(nèi)容為了實現(xiàn)智能GPS功能,我事先做了大量的準(zhǔn)備。包括前期對智能實現(xiàn)GPS功能這個課題的研究意義及需求進行了分析,也制定出了相應(yīng)的研究目標(biāo)及所實現(xiàn)的GPS的性能指標(biāo)。然后,我查找了大量書籍,深入了解了安卓操作系統(tǒng),明白了Android操作系統(tǒng)的由來系統(tǒng)構(gòu)架以及開發(fā)Android應(yīng)用程序所必須具備的計算機運行環(huán)境。我根據(jù)書上的性息,在自己的計算機上搭建了Android開發(fā)環(huán)境平臺。在論文的中期,我研究了安卓的定位方式,其相對來說還是比擬簡單的,目前我們可以使用位置管理器和位置提供者進行g(shù)etLocation的調(diào)用。這個方法返回本機的當(dāng)前位置的一個快照,這個快照將以Location對象形式提供。在手持設(shè)備中,我們可以獲得當(dāng)前位置的經(jīng)度和緯度。這樣就完成了自己位置確實定,如果需要查看自己所在的位置的話還需要調(diào)用一個地圖的API比方GoogleMap[2]。調(diào)用之后就可以在地圖顯示自己的位置了。在本次的工程中主要用到的就是當(dāng)前的經(jīng)度和緯度,并通過GoogleMap調(diào)用當(dāng)前的地理位置信息,還可以通過視圖切換按鈕,從的視圖框中觀察到當(dāng)前位置的衛(wèi)星視圖。有以上研究結(jié)果,我編寫出了程序的初步代碼。論文后期,已經(jīng)完成了基于安卓GPS定位工程的代碼編寫工作,并對此工程進行運行測試,在安卓2.2智能平臺,運行此工程,所得到的結(jié)果還是比擬讓人滿意的。1.3論文結(jié)構(gòu)安排論文將按照下面的描述進行內(nèi)容的安排。第一章引言,簡要介紹了GPS技術(shù)的開展,指出了課題研究的背景、意義和主要內(nèi)容。第二章Android系統(tǒng)下的軟件開發(fā),對安卓系統(tǒng)的由來及系統(tǒng)構(gòu)架做了分析和探討,然后詳細介紹了安卓的開發(fā)環(huán)境且在自己的計算機上完成了運行環(huán)境的搭建。第三章系統(tǒng)分析與設(shè)計,明確了系統(tǒng)研究的目標(biāo),描述了系統(tǒng)的功能結(jié)構(gòu),對系統(tǒng)需求進行了分析。第四章系統(tǒng)實現(xiàn),對程序進行了操作界面的設(shè)計,以及具體的編寫和模塊搭建工作。第五章系統(tǒng)測試,描述了對安卓智能實體機運行軟件的測試。說明了程序運行及安裝的方法,進行了現(xiàn)實中的GPS定位。結(jié)論與致謝,總結(jié)了本課題的研究工作,提出了今后進一步工作的方向,并向我?guī)椭完P(guān)心我的老師、同學(xué)和朋友們表示了衷心的感謝。第二章Android系統(tǒng)下的軟件開發(fā)2.1Android系統(tǒng)簡介2.1.1Android的由來Android是一種以Linux為根底的開放源碼操作系統(tǒng),主要使用于便攜設(shè)備。目前尚未有統(tǒng)一中文名稱,中國大陸地區(qū)較多人使用“安卓”或“安致”。Android操作系統(tǒng)最初由AndyRubin開發(fā),最初主要支持[3]。2005年由Google收購注資,并組建開放聯(lián)盟開發(fā)改進,逐漸擴展到平板電腦及其他領(lǐng)域上。Android的主要競爭對手是蘋果公司的iOS以及RIM的AndroidOS。2011年第一季度,Android在全球的市場份額首次超過塞班系統(tǒng),躍居全球第一。2012年2月數(shù)據(jù),Android占據(jù)全球智能操作系統(tǒng)市場52.5%的份額,中國市場占有率為68.4%。2.1.2Android的系統(tǒng)架構(gòu)Android的系統(tǒng)架構(gòu)和其它操作系統(tǒng)一樣,采用了分層的架構(gòu)。從架構(gòu)圖看,android分為四個層,從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運行庫層和linux核心層[4]。Android是以Linux為核心的操作平臺,作為一款開放式的操作系統(tǒng),隨著Android的快速開展,如今已允許開發(fā)者使用多種編程語言來開發(fā)Android應(yīng)用程序,而不再是以前只能使用Java開發(fā)Android應(yīng)用程序的單一局面,因而受到眾多開發(fā)者的歡送,成為真正意義上的開放式操作系統(tǒng)。在Android中,開發(fā)者可以使用Java作為編程語言來開發(fā)應(yīng)用程序,也可以通過NDK使用C/C++作為編程語言來開發(fā)應(yīng)用程序,也可使用SL4A來使用其他各種腳本語言進行編程,還有其他諸如:Qt〔qtforandroid〕、Mono〔monoforandroid〕等一些著名編程框架也開始支持Android編程,甚至通過MonoDroid,開發(fā)者還可以使用C#作為編程語言來開發(fā)應(yīng)用程序。另外,谷歌還在2009年特別發(fā)布了針對初學(xué)者的AndroidSimple語言,類似Basic語言。而在網(wǎng)頁編程語言方面,JavaScript,,HTML5,dojo、mobl、PhoneGap等等都已經(jīng)支持Android平臺。而在Android系統(tǒng)底層方面,Android使用C/C++作為開發(fā)語言[5]。2.1.3Android的應(yīng)用程序開發(fā)早期的Android應(yīng)用程序開發(fā),通常通過AndroidSDK〔Android軟件開發(fā)包〕下使用Java作為編程語言來開發(fā)應(yīng)用程序,但通過不同的軟件開發(fā)包,那么使用的編程語言也不同。例如開發(fā)者可以通過AndroidNDK〔AndroidNative開發(fā)包〕使用C語言或者C++語言來作為編程語言開發(fā)應(yīng)用程序。同時谷歌還推出了適合初學(xué)者編程使用的Simple語言,該語言類似微軟公司的VisualBasic語言[6]。此外,谷歌公司還推出了GoogleAppInventor開發(fā)工具,該開發(fā)工具可以快速地構(gòu)建應(yīng)用程序,方便新手開發(fā)者。2.2Android開發(fā)環(huán)境的構(gòu)建2.2.1Android系統(tǒng)開發(fā)環(huán)境根本組成Android的上層應(yīng)用程序是用Java語言開發(fā),同時還需要基于Dalvik虛擬機,所以,Google公司推薦使用主流的Java繼承開發(fā)環(huán)境Eclipse。只有Eclipse還不夠,因為是使用Java語言進行開發(fā),還應(yīng)該有由SUN公司提供的JavaSDK(其中包括JRE:JavaRuntimeEnvironment)。此外,Android的應(yīng)用程序開發(fā)和Java開發(fā)有較大區(qū)別的,所以還需要有Google提供的AndroidSDK。同時,還需要在Eclipse安裝ADT,為Android開發(fā)提供開發(fā)工具的升級或者變更,是Eclipse下開發(fā)工具的升級下載的工具。簡言之,需要以下軟件,才能搭建Android開發(fā)環(huán)境,從而進行Android應(yīng)用程序的開發(fā)[7]。(1)JavaJDK(2)Eclipse(3)ADT(4)AndroidSDK2.2.2JAVAJDK的安裝首先登陸JAVAJDK官網(wǎng),,我由于是32位系統(tǒng)所以下載的時候選擇32位的,我下載的是jdk-7u3-windows-x32然后安裝JavaJDK。安裝完成后,還需要設(shè)置環(huán)境變量,翻開我的電腦->屬性->高級系統(tǒng)設(shè)置->環(huán)境變量->系統(tǒng)變量中添加以下環(huán)境變量,如圖2.1所示。圖2.1添加系統(tǒng)環(huán)境變量〔1〕JAVA_HOME指明JDK安裝路徑,就是剛剛安裝時的路徑C:\ProgramFiles\Java\jdk1.6.0_21,此路徑下包括lib,bin,jre等文件夾〔2〕PATHPath使得系統(tǒng)可以在任何路徑下識別java命令,設(shè)為:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin〔3〕CLASSPATHCLASSPATH為java加載類(classorlib)路徑,只有類在classpath中,java命令才能識別,設(shè)為:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(要加.表示當(dāng)前路徑,%JAVA_HOME%就是引用前面指定的JAVA_HOME。)上述環(huán)境變量設(shè)置好了后,從開始菜單欄中運行cmd,在命令窗口里面運行“java–version”命令,如果可以從窗口中看到類似圖2.2的信息,即為安裝成功。圖2.2環(huán)境變量成功提示2.2.3Eclipse的安裝登陸Eclipse的官網(wǎng)并下載Eclipse,下載完成后,雙擊Eclipse解壓后目錄中的eclipse.exe然后啟動,選擇Eclipse菜單中的Help->InstallNewSoftware->選項卡上的AvailableSoftware,點擊右側(cè)的“Add”輸入后確定,然后在“Workwith”下拉菜單中選擇剛剛輸入的網(wǎng)址。過一會就會出現(xiàn)一個DeveloperTools選項,勾上以后點擊Next以后Eclipse會自動網(wǎng)上查找Android開發(fā)工具插件,然后找到AndroidDDMS和AndroidDevelopmentTools,選中這兩個點擊Finish,Eclipse就會自動下載并安裝Android插件了,最后會提示重啟Eclipse[8]。2.2.4ADT的安裝重啟后翻開Eclipse菜單Help>installnewsoftware選擇ADT,輸入Name:ADT;Location:按OK,然后全部全部打勾,安裝。一直按Next,接受其中的協(xié)議,最后會自動安裝。2.2.5AndroidSDK的安裝登陸AndroidSDK下載頁面下載AndroidSDK,下載完成后解壓。然后選擇Eclipse菜單中的Windows->Preferences在左側(cè)的Android工程中SDKLocation中填入AndroidSDK解壓后的目錄,然后點擊Apply,如圖2.3所示。圖2.3SDK安裝成功界面按“確定”后,重新啟動計算機。重啟計算機以后,進入cmd命令窗口運行android-h如果有類似以下的輸出,如圖2.4所示,說明SDK安裝成功:圖2.4驗證AndroidSDK是否安裝成功至此Android的開發(fā)環(huán)境搭建成功[15]。第三章系統(tǒng)分析與設(shè)計3.1研究目標(biāo)使用組件技術(shù)在Android平臺實現(xiàn)GPS軟件的開發(fā)。具體目標(biāo)包括:〔1〕界面友好,簡單實用,可操作性強,適合各年齡階層使用〔2〕程序運行速度快,占用系統(tǒng)內(nèi)存小〔3〕軟件大小要小,便于用戶用直接下載使用3.2需求分析本設(shè)計實現(xiàn)了基于Android平臺開發(fā)的GPS接收機系統(tǒng)設(shè)計的運行。GPS應(yīng)用越來越廣泛,我們的設(shè)計只是應(yīng)用的根底和開端。在實際應(yīng)用中我們要結(jié)合各個領(lǐng)域的特殊情況和特定的技術(shù)需求,進行有針對性的處理和設(shè)計。GPS提供的定位信息包括了經(jīng)度、緯度、海拔、速度、航向、磁場、時間、衛(wèi)星個數(shù)及其編號等衛(wèi)星信息其接收數(shù)據(jù)方法類似,故本設(shè)計只是提取了其中的局部價值性較高的數(shù)據(jù)信息,主要就是顯示用戶當(dāng)前所在位置的經(jīng)緯度坐標(biāo),并可以對視圖框中的地圖進行放大和縮小操作,如果用戶看不懂地圖,還可以調(diào)用此區(qū)域的衛(wèi)星視圖。3.3系統(tǒng)功能設(shè)計系統(tǒng)的主要功能包括:〔1〕定位當(dāng)前位置信息,通過智能內(nèi)置的GPS硬件,對用戶的地理位置進行衛(wèi)星定位,將所得到的經(jīng)緯度顯示在操作界面上,并將此坐標(biāo)上傳至GoogleMap,以便獲得當(dāng)前位置的地圖信息,然后將得到的信息以圖片的形式顯示在終端上?!?〕地圖信息的放大和縮小,用戶如果所在位置比擬空曠,難以從地圖上識別位置,便可放大或縮小地圖,通過觀察附近的道路或村莊來推斷自己的實際位置?!?〕衛(wèi)星視圖切換,如果用戶的地圖意識不強,還可以進行視圖切換,看到此區(qū)域的衛(wèi)星視圖,這樣以來就可以通過觀看地圖上的房屋排列或者是標(biāo)志性建筑來進行定位。第四章系統(tǒng)實現(xiàn)4.1Elipse文件的結(jié)構(gòu)及功能首先,要在Eclipse里面創(chuàng)立一個新工程,命名為MapView,如圖4.1所示。圖4.1工程的源代碼文件下面介紹下Android的工程目錄結(jié)構(gòu)。res:放置應(yīng)用程序用到的資源文件。其包含(Drawable,layout,values等目錄)。當(dāng)這個目錄下的文件發(fā)生變化時,src目錄下面的R.java就會自動發(fā)生變化。assets:主要放置多媒體等數(shù)據(jù)文件。res/drawable:放置應(yīng)用到的圖片資源。res/layout:放置一些與UI相應(yīng)的布局文件,都是xml文件。res/values:放置字符串,顏色,數(shù)組等常量數(shù)據(jù)。AndroidManifest.xml:相當(dāng)于應(yīng)用的配置文件。在此文件里必須聲明應(yīng)用的名稱,應(yīng)用所用到的Activity,Service,Reveiver等[10]。4.2界面設(shè)計根據(jù)需求分析可以知道,應(yīng)用程序包含一個界面就可以了,但是這個界面雖然簡單,但是要包含一個視圖框、三個按鈕和一個狀態(tài)欄。您當(dāng)前的位置是:緯度:您當(dāng)前的位置是:緯度:經(jīng)度:放大縮小衛(wèi)星視圖〔開〕視圖框圖4.2用戶界面草圖4.3程序模塊以及功能設(shè)計4.3.1程序模塊介紹該程序的模塊設(shè)計非常簡單,總共分為五個模塊:一個視圖框、一個坐標(biāo)顯示區(qū)域和三個按鈕。視圖框負責(zé)對當(dāng)前位置進行圖像進行顯示。坐標(biāo)顯示區(qū)域負責(zé)對顯示當(dāng)前坐標(biāo)。三個按鈕分別為:放大,縮小,衛(wèi)星視圖。4.3.2程序模塊的功能〔1〕坐標(biāo)顯示區(qū)域LocationManager.GPS_PROVIDER視圖框?qū)腉PS獲取最近的定位信息。location.getLatitude,獲取緯度信息。location.getLongitude,獲取經(jīng)度信息[14]?!?〕視圖框根據(jù)GPS的定位信息,系統(tǒng)將通過com.google.android.maps把地圖顯示在視圖框中?!?〕放大、縮小鈕分別調(diào)用zoomIn和zoomOut來放大或縮小地圖〔4〕衛(wèi)星視圖編寫switchMap來調(diào)用mapview.setSatellite來實現(xiàn)衛(wèi)星視圖和普通視圖之間的切換。到這里該程序所要實現(xiàn)的功能就根本可以實現(xiàn)了。4.4主要功能的實現(xiàn)為了實現(xiàn)系統(tǒng)功能,我對此進行了深入的研究。要知道每一種移動開發(fā)環(huán)境都有自己的基類。如J2ME應(yīng)用程序的基類是midlets,而Android程序的基類是Activity。這個Activity為我們提供了對移動操作系統(tǒng)的根本功能和事件的訪問。這個類包含了根本的構(gòu)造方法,鍵盤處理,掛起來恢復(fù)功能,以及其他底層的手持設(shè)備的訪問。實質(zhì)上,我們的應(yīng)用程序?qū)⑹且粋€Activity類的擴展。在本論文中我將使用Activity類來編寫Android程序。View類是Android的一個超類,這個類幾乎包含了所有的屏幕類型。但它們之間有一些不同。每一個view都有一個用于繪畫的畫布。這個畫布可以用來進行任意擴展。本文為了方便起見,只涉及到了兩個主要的View類型:定義View和Android的XML內(nèi)容View。在上面的代碼中,使用的是“HelloWorld”XMLView,它是以非常自然的方式開始的。如果我們查看一下新的Android工程,就會發(fā)現(xiàn)一個叫main.xml的文件。在這個文件中,通過一個簡單的XML文件,描述了一個屏幕的布局。由于本文主要應(yīng)用就是GoogleMapAPI,所以其中涉及到大量方法以及相關(guān)參數(shù),簡單介紹如下[12]:〔1〕GBrowserIsCompatible()--

是否支持GoogleMapAPI

〔2〕location.getLatitude()–

目標(biāo)位置的緯度坐標(biāo);〔3〕location.getLongitude()–

目標(biāo)位置的經(jīng)度坐標(biāo)〔4〕newGLatLng(myLat,myLng)--

設(shè)置經(jīng)緯度〔5〕map.setCenter(newGLatLng(myLat,myLng),14)--

設(shè)置地圖默認的中心點經(jīng)緯度

〔6〕newGLatLng(myLat,myLng)--

設(shè)置中心點的經(jīng)緯度〔7〕14--

地圖的默認縮放比例大小值,范圍為1-18

〔8〕newGMap2(document.getElementById("GoogleMap"))--

獲取顯示的地圖容器〔9〕map.setMapType(G_NORMAL_MAP);--

設(shè)置顯示地圖的類型可選值:a.G_NORMAL_MAP--

默認地圖樣式b.G_SATELLITE_MAP--GoogleEarth衛(wèi)星地圖c.G_HYBRID_MAP--

混合模式地圖〔10〕newGIcon(G_DEFAULT_ICON)--

設(shè)置標(biāo)記樣式〔11〕addControl()--

給地圖添加控件常用的可選控件有:a.newGLargeMapControl()--

大的地圖縮放級別控件b.newGOverviewMapControl()--

地圖縮略圖控件c.newGScaleControl()--

比例尺控件d.newGMapTypeControl()--

地圖類形選擇控件〔12〕enableContinuousZoom()--

允許連貫改變地圖比例〔13〕createMarker(latlng)--

自定義方法〔14〕newGMarker(latlng)--

在地圖中設(shè)置標(biāo)簽,參數(shù)latlng--

標(biāo)簽的坐標(biāo)〔15〕Event.addListener(marker,event,function)--

給標(biāo)簽設(shè)置事件marker--

標(biāo)簽對象,

event--

事件名稱function--

時間的處理函數(shù)〔16〕openInfoWindowHtml(latlng,myHtml)--

將信息框添加到標(biāo)簽上latlng--

標(biāo)簽坐標(biāo),

myHtml--

提示信息的HTML字符串4.4.1獲得GoogleMapAPIKey使用GoogleMapAPI前,必須先生成GoogleMapAPIKEY.具體步驟如下:第一步:生成GoogleMapAPIKey要使用androiddebug模式下的keystore密鑰庫[14]。其位于C:\users\dongliang\.android\debug.keystore目錄下〔dongliang是電腦用戶名〕。輸入命令生成MDK5Key,如圖4.3所示圖4.3生成MDK5Key第二步:到GoogleMapAPI的主頁去申請GoogleMapAPIKEY。登錄地址頁面,在其中的MD5fingerprint一欄中輸入剛剛生成的MD5密紋,如圖4.4所示圖4.4生成GoogleMapAPIKEY如果你是第一次使用GoogleMapAPI你要按照提示申請一個賬號。然后就可以得到唯一密鑰,本機的密鑰為android:apiKey="0_kiK_qH-JI4hNZxaSZ50LaDmeX7_pxeSggjlhQ"/>4.4.2布局及按鈕的設(shè)置這局部模塊代碼在res/layout/main.xml中:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="://schemas.android/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent">//定義一個寬高都滿屏的垂直排列窗口<TextView android:id="@+id/myLocationText"android:layout_width="fill_parent"android:layout_height="wrap_content"/>//定義一個寬滿屏高隨內(nèi)容自動拉伸的文本框<LinearLayoutandroid:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="wrap_content">//定義一個水平的流輸出口<Buttonandroid:id="@+id/in"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:text="放大"/>//定義一個名稱為in的按鈕,其上顯示放大,級別為1<Buttonandroid:id="@+id/out"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:text="縮小"/>//定義一個名稱為out的按鈕,其上顯示縮小,級別為1</LinearLayout><ToggleButtonandroid:id="@+id/switchMap"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textOff="衛(wèi)星視圖(關(guān))"android:textOn="衛(wèi)星視圖(開)"/>//定義一個雙位開關(guān),默認顯示衛(wèi)星視圖〔關(guān)〕,點擊后顯示衛(wèi)星視圖〔開〕,高寬都為自動拉伸類型 android:id="@+id/myMapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" android:apiKey="0_kiK_qH-JI4hNZxaSZ50LaDmeX7_pxeSggjlhQ"/></LinearLayout>//此為與谷歌地圖連接的必要代碼其中倒數(shù)第二行中就使用到了上一章節(jié)所得的密鑰。4.4.3配置窗體部件字符串文件將字符串顯示分別放入res/values/string.xml。代碼如下:<?xmlversion="1.0"encoding="utf-8"?><resources><stringname="hello">HelloWorld,MapView!</string><stringname="app_name>MapView</string>//顯示軟件的名稱為MapView</resources>4.4.4關(guān)于應(yīng)用配置及聲明的設(shè)置<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="://schemas.android/apk/res/android"package="com.map"android:versionCode="1"android:versionName="1.0.0">//版本信息<applicationandroid:icon="@drawable/icon"android:label="@string/app_name"><activityandroid:name="MapView1"android:label="@string/app_name">//聲明類MapView1<intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity><uses-libraryandroid:name="com.google.android.maps"/></application><uses-permissionandroid:name="android.permission.INTERNET"/>//允許此程序聯(lián)網(wǎng)<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>//允許程序進行精確定位</manifest>4.4.5主程序框架介紹工程的主程序,位置應(yīng)在src/com.map的兩個源程序里,需要將各個包名已經(jīng)類的屬性進行聲明,具體如下:packagecom.map;//com.map包importjava.util.ArrayList;importandroid.app.AlertDialog;importandroid.content.Context;importandroid.graphics.drawable.Drawable;importcom.google.android.maps.ItemizedOverlay;importcom.google.android.maps.OverlayItem;//以上為導(dǎo)入的一些方法publicclassHelloItemizedOverlayextendsItemizedOverlay//公共類的聲明privateArrayList<OverlayItem>mOverlays=newArrayList<OverlayItem>();privateContextmContext;packagecom.map;//另一個com.map包importjava.util.List;importandroid.content.Context;importandroid.graphics.drawable.Drawable;importandroid.location.Criteria;importandroid.location.Location;importandroid.location.LocationListener;importandroid.location.LocationManager;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;//設(shè)置鼠標(biāo)監(jiān)聽importandroid.widget.Button;importandroid.widgetpoundButton;importandroid.widget.TextView;importandroid.widget.ToggleButton;importandroid.widgetpoundButton.OnCheckedChangeListener;importcom.google.android.maps.GeoPoint;importcom.google.android.maps.MapActivity;importcom.google.android.maps.MapController;importcom.google.android.maps.MapView;importcom.google.android.maps.MyLocationOverlay;importcom.google.android.maps.Overlay;importcom.google.android.maps.OverlayItem;//以上都為導(dǎo)入的一些方法然后按照步驟開始對程序進行編譯,由于篇幅限制,所以這里將只舉例說明幾個主要部件代碼編譯。地圖放大縮小的相關(guān)操作@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);mapview=(MapView)findViewById(R.id.myMapView);List<Overlay>overlays=mapview.getOverlays();MyLocationOverlaymyLocation=newMyLocationOverlay(this,mapview);myLocation.enableMyLocation();overlays.add(myLocation);ctrlMap=mapview.getController();inBtn=(Button)findViewById(R.id.in);//尋找名為in的按鈕將其值賦予inBtnoutBtn=(Button)findViewById(R.id.out);//尋找名為out的按鈕將其值賦予outBtnswitchMap=(ToggleButton)findViewById(R.id.switchMap);OnClickListenerlistener=newOnClickListener(){@OverridepublicvoidonClick(Viewv){switch(v.getId()){caseR.id.in:ctrlMap.zoomIn();//控制地圖放大break;caseR.id.out:ctrlMap.zoomOut();//控制地圖縮小break;default:break;}}};inBtn.setOnClickListener(listener);outBtn.setOnClickListener(listener);對衛(wèi)星視圖的相關(guān)設(shè)定switchMap.setOnCheckedChangeListener(newOnCheckedChangeListener(){@OverridepublicvoidonCheckedChanged(CompoundButtoncBtn,booleanisChecked){if(isChecked==true)//如果被點擊了{mapview.setSatellite(true);//顯示衛(wèi)星視圖}else{mapview.setSatellite(false);//不顯示衛(wèi)星視圖}}});對坐標(biāo)顯示區(qū)域的設(shè)置privatevoidupdateWithNewLocation(Locationlocation){ StringlatLongString; TextViewmyLocationText; myLocationText=(TextView)findViewById(R.id.myLocationText); if(location!=null)//如果location不為空{(diào) doublelat=location.getLatitude();//獲取緯度信息,并賦值給雙精度的lat doublelng=location.getLongitude();//獲取經(jīng)度信息,并賦值給雙精度的lng latLongString="緯度:"+lat+"\n經(jīng)度:"+lng;//將經(jīng)緯度信息賦予字符串 System.out.println(lat+""+lng);//在軟件中輸出經(jīng)緯度信息 ctrlMap.animateTo(newGeoPoint((int)(lat*1E6),(int)(lng*1E6))); }else{ latLongString="無法獲取地理信息";//如果無法得到經(jīng)緯度,將"無法獲取地理信息"賦予latLongString System.out.println("nolocation");//在軟件中輸出} myLocationText.setText("您當(dāng)前的位置是:\n"+latLongString);}}第五章系統(tǒng)測試通過前面的一章,已經(jīng)完成了GPS定位工程的代碼編寫工作,下面將對此工程進行實體機運行測試:〔1〕將程序目錄下的apk應(yīng)用文件拷貝到安卓2.2智能平臺,等待開機后會出現(xiàn)鎖屏狀態(tài),在此狀態(tài)下可以看到時間日期以及的電量信息等,如下列圖5.1所示。圖5.1虛擬機鎖屏界面圖5.2主菜單中的MapView〔2〕這時滑動解鎖滑條解鎖,在的資源管理器中找到剛剛拷貝的文件,點擊其進行安裝之后就可以在主菜單中看見程序MapView,它在程序列表的第三行第二列,由安卓默認的圖標(biāo)顯示,如上圖5.2所示。〔3〕下面我們輕觸MapView圖標(biāo),程序就會立即運行,運行后就可以看到上一章在程序中編寫的界面,其中有放大按鈕,縮小按鈕以及衛(wèi)星視圖按鈕,還有最主要的地圖視圖框,如下列圖5.3所示。圖5.3程序運行界面圖圖5.4翻開GPS功能〔4〕由于的GPS功能沒有翻開,所以我們可以看到您當(dāng)前的位置這一欄顯示的是無法獲取地理信息,所以地圖視圖框中只顯示程序所編寫的初始化位置。下面在的設(shè)置功能中翻開其運用,具體操作是在主菜單翻開Settings功能,找到Location&securitysettings,在其中的MyLocation中就可以看見UseGPSsatellites功能,將其打勾,如上圖5.4所示?!?〕我們可以從最上方的狀態(tài)欄中看到一個小衛(wèi)星接受器的圖標(biāo),表示GPS運用已翻開?;氐組apView軟件就會發(fā)現(xiàn)中的顯示數(shù)據(jù)發(fā)生了改變,當(dāng)前的地理位置的緯度及經(jīng)度坐標(biāo)被顯示了出來,在視圖框中也可以看見當(dāng)前的道路信息,如下列圖5.5所示。圖5.5定位結(jié)果顯示圖5.6衛(wèi)星視圖顯示〔6〕下面我們點擊“衛(wèi)星視圖”按鈕,會發(fā)現(xiàn)按鈕上的字由“衛(wèi)星視圖〔關(guān)〕”變成了“衛(wèi)星視圖〔開〕”,按鈕上也出現(xiàn)了標(biāo)記的圖案,通過兩幅圖的比擬,我們可以很明顯的看出相對于普通視圖,衛(wèi)星視圖更加的直觀,極大的改善了用戶的定位體驗。結(jié)果如上圖5.6所示?!?〕我們在普通視圖的根底上點擊“放大”按鈕,可以直觀的看到一些剛剛沒有看見的,比擬小的道路。這樣以來用戶在自己所處位置比擬繁華,道路過于繁多的時候,將地圖放大,就可精確定位街道。這個功能是我們進行定位而常用的功能之一。結(jié)果如下列圖5.7所示。圖5.7放大后結(jié)果圖5.8縮小后結(jié)果〔8〕下面繼續(xù)點擊“縮小”按鈕,這個鍵的功能與“放大”按鈕恰恰相反,它會讓我們有一種地圖“遠去”的感覺,這樣以來用戶在自己所處位置比擬偏僻,且附近又沒有街道的時候,就可以利用縮小地圖的方

溫馨提示

  • 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論