版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、基于android和google map的地圖定位程序的設(shè)計與實現(xiàn)Android是一種以Linux為基礎(chǔ)的開放源碼操作系統(tǒng),主要使用于便攜設(shè)備。它由谷歌公司和開放手持設(shè)備聯(lián)盟開發(fā)和領(lǐng)導(dǎo)。除了開放手持設(shè)備聯(lián)盟之外,Android還擁有許多由全球各地開發(fā)者組成的開源社區(qū)來專門負(fù)責(zé)開發(fā)Android應(yīng)用程序和第三方Android操作系統(tǒng)來延長和擴展Android的功能和性能。2011年8月,Android操作系統(tǒng)在全球智能手機操作系統(tǒng)的市場份額已達48%,成為全球第一大智能手機操作系統(tǒng),躍居全球最受歡迎的智能手機平臺。Google Map,是Google公司向全球提供的電子地圖服務(wù),包括局部詳細(xì)的衛(wèi)
2、星照片。由于Google地圖是一項電子地圖服務(wù),因而擁有比紙質(zhì)地圖更多的優(yōu)越性,特別是近年來移動設(shè)備的智能化,網(wǎng)絡(luò)速度的提升,更是讓Google地圖與人們的生活產(chǎn)生更為緊密的聯(lián)系,因而倍受人們的贊譽。Android操作系統(tǒng)平臺很容易跟Google的一些應(yīng)用如Google Map整合。在Android應(yīng)用中,如果能在其中加入Google Map,則會為應(yīng)用增添強大的功能,目前不少LBS應(yīng)用(基于地理位置的應(yīng)用)就是充分將移動跟地圖結(jié)合起來。本設(shè)計旨在為使用基于Android操作系統(tǒng)的移動設(shè)備(如手機、平板電腦等)的用戶提供一種準(zhǔn)確、方便的定位系統(tǒng),可以通過經(jīng)緯度信息,甚至僅僅是地名,就能在地圖上
3、找到該地的地理位置。軟件的開發(fā)使用Java語言、Google APIsAndroid 2.2開發(fā)包和Eclipse 3.3開發(fā)環(huán)境。關(guān)鍵詞:Android;Google Map;定位;Google APIs;Json目錄一、設(shè)計目標(biāo)41.1 Android平臺簡介41.2 Google地圖簡介41.3功能實現(xiàn)4二、環(huán)境配置52.1下載相關(guān)軟件52.2安裝軟件和配置環(huán)境52.2.1安裝JDK52.2.2安裝Eclipse62.2.3配置Android環(huán)境62.3創(chuàng)建基于Google APIs的AVD62.4獲取Google Map API72.4.1安裝Google Map API72.4.2獲
4、得Google Map API Key7三、設(shè)計思路93.1通過經(jīng)緯度定位的設(shè)計思路93.2通過地名定位的設(shè)計思路9四、設(shè)計過程114.1Google Map API 的使用114.2通過經(jīng)緯度定位的實現(xiàn)114.2.1創(chuàng)建工程114.2.2 修改AndroidManifest.xml 文件114.2.3修改main.xml114.2.4實現(xiàn)MapActivity124.2.5 MapController 的使用124.2.6增加標(biāo)記124.3通過地名定位的實現(xiàn)134.3.1監(jiān)聽響應(yīng)函數(shù)的實現(xiàn)134.3.2 getLocationInfo()函數(shù)的實現(xiàn)134.3.3 getPoint()函數(shù)的實
5、現(xiàn)14五、結(jié)果測試155.1啟動MapIII155.2一些簡單的操作165.3測試通過經(jīng)緯度定位175.4測試通過地名定位175.5退出程序18六、程序發(fā)布196.1生成keystore196.2 eclipse生成apk文件19七、總結(jié)21參考文獻22附錄:231.AndroidManifest.xml232. main.xml233.strings.xml254.MapIIIActivity.java265.R.java316.包含“合肥學(xué)院新區(qū)”的相關(guān)地理信息的Json數(shù)據(jù)32一、設(shè)計目標(biāo)1.1 Android平臺簡介Android是Google于2007年11月05日宣布的基于Linu
6、x平臺的開源移動操作系統(tǒng)的名稱,該平臺由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成。它采用軟件堆層(Software Stack,又名軟件疊層)的架構(gòu),主要分為三部分。底層以Linux內(nèi)核工作為基礎(chǔ),由C語言開發(fā),只提供基本功能;中間層包括函數(shù)庫Library和虛擬機Virtual Machine,由C+開發(fā)。最上層是各種應(yīng)用軟件,包括通話程序,短信程序等,應(yīng)用軟件則由各公司自行開發(fā),以Java作為編寫程序的一部分。不存在任何以往阻礙移動產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙,號稱是首個為移動終端打造的真正開放和完整的移動軟件。2011年第一季度,Android在全球的市場份額首次超過塞班系統(tǒng),躍居全球第一。 2
7、011年11月數(shù)據(jù),Android占據(jù)全球智能手機操作系統(tǒng)市場52.5%的份額,中國市場占有率為58%。1.2 Google地圖簡介提起Google,人們最先想到的一定是它的搜索引擎,不過繼搜索引擎之后,Google地圖的影響力越來越大。在Android系統(tǒng)剛剛起步的時候,Google就看到了基于定位服務(wù)的應(yīng)用潛力,并將Google地圖的成功經(jīng)驗帶入了Android系統(tǒng)當(dāng)中。很多基于定位功能的應(yīng)用程序最終都需要顯示地圖,Google地圖已經(jīng)可以非常成熟地顯示交互式地圖,其商業(yè)模式還允許第三方網(wǎng)站將Google地圖嵌入到自己的頁面中。Google地圖的大部分功能都可以在Android平臺上實現(xiàn),
8、Android平臺下的開發(fā)者可以將Google地圖嵌入到自己的應(yīng)用程序中。Google地圖是 Google 公司提供的電子地圖服務(wù),包括局部詳細(xì)的衛(wèi)星照片。能提供三種視圖:一是矢量地圖(傳統(tǒng)地圖),可提供政區(qū)和交通以及商業(yè)信息;二是不同分辨率的衛(wèi)星照片(俯視圖,跟 Google Earth 上的衛(wèi)星照片基本一樣);三是地形視圖,可以用以顯示地形和等高線。1.3功能實現(xiàn)本設(shè)計旨在為使用基于Android操作系統(tǒng)的移動設(shè)備(如手機、平板電腦等)的用戶提供一種準(zhǔn)確、方便的定位系統(tǒng),可以通過經(jīng)緯度信息,甚至僅僅是地名,就能在地圖上找到該地的地理位置。軟件的開發(fā)使用Java語言、Google APIsA
9、ndroid 2.2開發(fā)包和Eclipse 3.3開發(fā)環(huán)境。二、環(huán)境配置2.1下載相關(guān)軟件表2.1相關(guān)軟件軟件名稱對應(yīng)下載網(wǎng)址JDK6.0Eclipse 3.3/downloads/Android SDK2.2安裝軟件和配置環(huán)境2.2.1安裝JDK下載好JDK是一個可執(zhí)行安裝程序,雙擊安裝。假設(shè)安裝路徑為:C:/Program Files/Java/jdk1.6.0_05(當(dāng)然其他路徑也可以)。JDK安裝完成之后要設(shè)置系統(tǒng)環(huán)境變量: 我的電腦點右鍵,選擇“屬性”,選擇“高級”標(biāo)簽,進入環(huán)境變量設(shè)置。環(huán)境變量設(shè)置,分別設(shè)置三個環(huán)境變量:JAVA_HOME
10、、path變量、classpath變量。1.設(shè)置JAVA_HOME在系統(tǒng)環(huán)境變量那一欄中,點“新建”JAVA_HOME(JAVA_HOME指向的是JDK的安裝路徑)。變量名:JAVA_HOME;變量值:C:/Program Files/Java/jdk1.6.0_05。設(shè)置JAVA_HOME量的目的:(1)為了方便引用,比如,JDK安裝C:/Program Files/Java/jdk1.6.0_05目錄里,則設(shè)置JAVA_HOME為該目錄路徑, 那么以后要使用這個路徑的時候, 只需輸入%JAVA_HOME%即可, 避免每次引用都輸入很長的路徑串。(2)歸一原則, 當(dāng)JDK路徑改變的時候, 僅
11、需更改JAVA_HOME的變量值即可。否則,就要更改任何用絕對路徑引用JDK目錄的文檔,沒有改全則某個程序找不到JDK, 后果將導(dǎo)致系統(tǒng)崩潰。(3)第三方軟件會引用約定好的JAVA_HOME變量, 否則不能正常使用該軟件。2.設(shè)置path變量在系統(tǒng)變量里找到path變量,選擇“編輯”變量名:path ,變量值: %JAVA_HOME%/bin。設(shè)置path變量的目的:使得我們能夠在系統(tǒng)中的任何地方運行java應(yīng)用程序,比如javac、java、javah等,這就要找到我們安裝JDK的目錄,比如我們的JDK安裝在C:/Program Files/Java/jdk1.6.0_05目錄下,那么在C:
12、/Program Files/Java/jdk1.6.0_05/bin目錄下就是我們常用的java應(yīng)用程序,我們就需要把C:/jdk1.6.0/bin這個目錄加到path環(huán)境變量里面。3.設(shè)置classpath環(huán)境在系統(tǒng)環(huán)境變量那一欄中點“新建”classpath。變量名: classpath ,變量值:.;%JAVA_HOME%/lib/;%JAVA_HOME%/jre/lib/(注意,CLASSPATH最前面是有個“.”的,表示當(dāng)前目錄,這樣當(dāng)我們運行java AClass的時候,系統(tǒng)就會先在當(dāng)前目錄尋找AClass文件了)。2.2.2安裝Eclipse將下載的Eclipse3.3壓縮包解
13、壓到相應(yīng)的安裝目錄即可。2.2.3配置Android環(huán)境為了讓開發(fā)過程更輕松,Google還編寫了一款A(yù)DT的Eclipse插件。要想安裝該插件,請執(zhí)行以下步驟。啟動Eclipse,然后選擇Help>Software Updates。單擊Available Software選項卡。單擊Add Site按鈕。輸入Android更新站點的位置:https:/dl-現(xiàn)在,該Android站點應(yīng)該出現(xiàn)在Available Software視圖中。選中該站點旁邊的復(fù)選框,然后單擊Install。如果出現(xiàn)錯誤信息,原因可能是Eclipse的版本不對。單擊Finish開始下載安裝過程。安裝完成后,重新
14、啟動Eclipse。Eclipse啟動后可能出現(xiàn)幾條錯誤信息,因為此時需要告訴你Android SDK位于何處。選擇Window>Preferences>Android,然后輸入你在前面記下的SDK安裝目錄。單擊OK按鈕。2.3創(chuàng)建基于Google APIs的AVD 在Eclipse中打開AVD管理界面,點擊“new”按鈕,在“Create new AVD”對話框的Name處填寫AVD的名字GM,在Target處選擇“Google APIs (Google Inc.) API Level 8”,如圖2.1所示,點擊“Create AVD”按鈕完成創(chuàng)建。圖2.1創(chuàng)建AVD2.4獲取G
15、oogle Map API2.4.1安裝Google Map API開發(fā)基于谷歌地圖的應(yīng)用和普通的Android 應(yīng)用差不多都要使用它提供給我們的類庫,所不同的是Google Map的類庫不是Android 平臺的基本類庫,而是Google API的一部分,所以建立項目時,SDK 要選擇Google APIs選項。2.4.2獲得Google Map API Key在正式使用Google Map API 前,必須先生成Google Map API KEY。1.找到debug.keystore 文件在Eclipse工具下,選擇windowsPreferenceAndroidBuild,其中Defa
16、ultdebug keystore的值便是debug.keystore的路徑。2.取得debug.keystore的MD5值首先cmd命令行進入debug.keystore文件所在的路徑,執(zhí)行命令:keytool -list -keystore debug.keystore,默認(rèn)的密碼是:android,即可取得MD5值了,如圖2.2所示。圖2.2獲得MD5 3.申請Android Map 的API Key打開瀏覽器,輸入網(wǎng)址: Key了,結(jié)果顯示如圖2.3所示。圖2.3獲得API三、設(shè)計思路3.1通過經(jīng)緯度定位的設(shè)計思路本功能實現(xiàn)的目標(biāo)是:在兩個EditText對話框中分別輸入經(jīng)度和緯度之后
17、,點擊相應(yīng)的Button按鈕,在屏幕中的地圖中會顯示出所定位的位置,并在此位置上做出標(biāo)記。首先要引用com.google.android.maps包來實現(xiàn)一個地圖瀏覽程序,創(chuàng)建一個MapView對象來顯示地圖。通過MapController對象來設(shè)置地圖顯示的地點以及放大的倍數(shù),要定位地點需要構(gòu)建一個GeoPoint對象來表示地點的經(jīng)度和緯度,然后使用animateTo方法將地圖定位到指定的GeoPoint對象上,再新建一個Overlay對象并在上面標(biāo)注一些圖標(biāo)文字信息。3.2通過地名定位的設(shè)計思路本功能的實現(xiàn)目標(biāo)是:在一個EditText里輸入一個地名,點擊Button,在MapView里便
18、會顯示出該地。實際上,由于在Google Map中必須獲得經(jīng)緯度才能定位,故本定位方法不過是前一種定位方法的加強版,即先通過地名獲得該地的經(jīng)緯度,再通過經(jīng)緯度進行定位。由此可知,本設(shè)計的核心內(nèi)容,便是如何通過地名獲得該地的經(jīng)緯度。本來此問題應(yīng)該很好解決,因為Google提供了一個用于實現(xiàn)該功能的Geocoder類,只要使用該類生成一個對象,并使用getFromLocationName()方法,只需幾句代碼便可輕松將地名轉(zhuǎn)換為相應(yīng)的經(jīng)緯度,我們手中的android開發(fā)教材和網(wǎng)絡(luò)上能夠搜索到的絕大部分資料中使用的都是該方法,如下:Geocoder geocoder=new Geocoder(thi
19、s);List<Address> list=geoCoder.getFromLocationName(Address,1); /Address是輸入的地址信息if(!lstAddress.isEmpty()Address address=list.get(0);double latitude=address.getLatitude()*1E6;double longitude=adress.getLongitude()*1E6;GeoPoint geopoint=new GeoPoint(int)latitude,(int)longitude);但我們在實際的開發(fā)過程中發(fā)現(xiàn),在調(diào)試
20、程序時,點擊Button后,程序沒有任何響應(yīng)。經(jīng)反復(fù)調(diào)查研究后我們得知,由于google map中的Getcoder反轉(zhuǎn)經(jīng)緯度一直存在BUG,在前一段時間google終止了這項服務(wù),故Geocoder返回List為null,得不到地址信息。當(dāng)我們正一籌莫展之時,我們從一份資料上獲得了另一種新的但較為麻煩的獲取地理位置經(jīng)緯度的方法:通過JSON數(shù)據(jù)解析地址。JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個子集。 JSON采用完
21、全獨立于語言的文本格式,但是也使用了類似于C語言家族的習(xí)慣,這些特性使JSON成為理想的數(shù)據(jù)交換語言,易于人閱讀和編寫,同時也易于機器解析和生成。在瀏覽器的地址欄里輸入以下網(wǎng)址:“n?address=合肥學(xué)院新區(qū)&sensor=false”(其中“合肥學(xué)院新區(qū)”可以更換成任意地址,中英文皆可),便可得到一份JSON數(shù)據(jù)(見附錄),里面包含了許多關(guān)于合肥學(xué)院新區(qū)站的地理位置信息的鍵值對,其中我們可以找到合肥學(xué)院新區(qū)站的經(jīng)緯度"location" : "lat" : 31.7543920,"lng" : 117.2503090。那
22、么,程序所要做的,就是通過該網(wǎng)址發(fā)送http請求,獲得Json數(shù)據(jù),并且把我們需要的經(jīng)緯度數(shù)據(jù)“抽取”出來,填入到GeoPoint的對象中,就可以用上一種方法定位了。 設(shè)計思路大體如此,具體的設(shè)計過程中會涉及到在android中通過http請求網(wǎng)絡(luò)資源和Json數(shù)據(jù)的解析等較為高級的核心技術(shù),手中的幾本android開發(fā)教材中都找不到相關(guān)的介紹,只能通過從網(wǎng)上搜集到的一些少量的、零散的資料中略窺一斑,因此我們也是摸著石頭過河。四、設(shè)計過程4.1Google Map API 的使用Android中定義了一個名為com.google.android.maps的包,其中包含了一系列用于在Google
23、 Map上顯示、控制和層疊信息的功能類,以下是該包中最重要的幾個類:MapActivity:這個類是用于顯示Google Map的Activity類,它需要連接底層網(wǎng)絡(luò)MapActivity是一個抽象類,任何想要顯示MapView的activity都需要派生自MapActivity,并且在其派生類的onCreate()中,都要創(chuàng)建一個MapView實例。MapView:用于顯示地圖的View組件。它派生自android.view.ViewGroup。它必須和MapActivity配合使用,而且只能被MapActivity創(chuàng)建,這是因為MapView需要通過后臺的線程來連接網(wǎng)絡(luò)或者文件系統(tǒng),而這
24、些線程要由MapActivity來管理。MapController:用于控制地圖的移動、縮放等。Overlay:可用于顯示地圖之上的可繪制的對象。GeoPoint:一個包含經(jīng)緯度位置的對象。4.2通過經(jīng)緯度定位的實現(xiàn)4.2.1創(chuàng)建工程在Eclipse環(huán)境下,選擇FileNewProjectAndroid,選擇Android Project。創(chuàng)建方法同普通Java項目和其他Android項目并無明顯區(qū)別,但必須在Build Target 中勾選Google API。4.2.2 修改AndroidManifest.xml 文件因為地圖應(yīng)用使用的是Google Maps 的類庫,而不是Android
25、 的標(biāo)準(zhǔn)類庫,所以需要在AndroidManifest.xml 文件的</application>標(biāo)簽中聲明:<uses-library android:name="com.google.android.maps" />由于需要從網(wǎng)絡(luò)獲取地圖數(shù)據(jù),所以需要訪問網(wǎng)絡(luò)的權(quán)限:<uses-permission android:name="android.permission.INTERNET" />4.2.3修改main.xml需要在main.xml里創(chuàng)建一個來自com.google.android.maps.MapView
26、的MapView標(biāo)簽。其中clickable屬性設(shè)置了是否允許用戶和地圖的交互,apiKey里填寫的就是剛剛申請到的apiKey: <com.google.android.maps.MapViewandroid:id="+id/mapView"android:layout_width="fill_parent"android:layout_height="wrap_content"android:clickable="true"android:apiKey="0avAw-1ozxNMipBtFVOv
27、-v9zzbSNrxLcMqhp_DA"/> 4.2.4實現(xiàn)MapActivityMapView需要由MapActivity來管理,所以程序部分應(yīng)該繼承自Activity的一個特殊子類MapActivity類,同時必須實現(xiàn)isRouteDisplayed()函數(shù),獲得MapView實例以后,通過setBuiltZoomControls方法設(shè)置地圖是否支持縮放。另外MapView提供了三種模式的地圖,分別可以通過以下方式設(shè)置采用什么模式來顯示地圖:mapView.setTraffic(true); /設(shè)置為交通模式mapView.setSatellite(true); /設(shè)置為衛(wèi)
28、星模式mapView.setStreetView(false);/設(shè)置為街景模式4.2.5 MapController 的使用如果需要設(shè)置地圖顯示的地點以及放大倍數(shù)等,就需要使用MapController來控制地圖??梢酝ㄟ^如下代碼獲得MapController對象:MapController mapController; mapController = mapView.getController(); 要定位地點,需要構(gòu)造一個GeoPoint來表示地點的經(jīng)緯度,然后使用animateTo方法將地圖定位到指定的GeoPoint上,代碼如下:GeoPoint geoPoint01;geoPoin
29、t01= new GeoPoint(int) (editText01double * 1000000), (int) (editText02double * 1000000); mapController.animateTo(geoPoint01);4.2.6增加標(biāo)記為了給地圖多增加一些自定義的功能,比如可以在地圖上進行一些標(biāo)注。為了實現(xiàn)這樣的功能,我們可以繼承Overlay 這個類,這個類是一個基類,提供了可以在地圖上添加圖層的基本功能。在定位的目標(biāo)地點引入一張圖片做標(biāo)記,代碼如下:canvas.drawBitmap(bmp, myScreenCoords.x, myScreenCoords
30、.y, paint);在定位的目標(biāo)地點添加文字做標(biāo)記,代碼如下:canvas.drawText("定位目標(biāo)", myScreenCoords.x, myScreenCoords.y, paint);4.3通過地名定位的實現(xiàn)4.3.1監(jiān)聽響應(yīng)函數(shù)的實現(xiàn)1.從TextView對象中獲取輸入的地址信息:String address=editText03.getText().toString();2.下面調(diào)用了兩個函數(shù)getLocationInfo()和getGeoPoint(),前者通過http取得Json數(shù)據(jù),返回的是JsonObject對象,交給后者;后者解析出JsonObj
31、ect對象中的經(jīng)緯度數(shù)據(jù),交給GeoPoint對象,并將GeoPoint對象返回:geoPoint02=getGeoPoint(getLocationInfo(address);3. 使用animateTo方法將定位:mapController.animateTo(geoPoint02);4.3.2 getLocationInfo()函數(shù)的實現(xiàn)1.根據(jù)url地址創(chuàng)建HttpGet請求對象:HttpGet httpGet=new HttpGet("geocode/json?address=" + address + "&sensor=false")
32、; 2.創(chuàng)建http客戶端對象: HttpClient httpClient=new DefaultHttpClient();3.創(chuàng)建http響應(yīng)對象: HttpResponse httpResponse; 4.定義一個字符串緩沖區(qū),與一般的String對象的區(qū)別是StringBuffer對象里面的內(nèi)容可以增加和修改,用于存儲從InputStream對象中讀取出的字符串:StringBuffer stringBuffer=new StringBuffer(); 5.通過HttpClient對象執(zhí)行一次GET方式的http請求,并返回一個HttpResponse對象作為服務(wù)器的響應(yīng):httpRe
33、sponse=httpClient.execute(httpGet); 6.獲取響應(yīng)的內(nèi)容,這里需注意HttpResponse對象只是代表了服務(wù)器的響應(yīng),HttpEntity對象才是該響應(yīng)的實體:HttpEntity httpEntity=httpResponse.getEntity();7.獲取服務(wù)器響應(yīng)的輸入流,getContent()方法可以得到其內(nèi)容:InputStream inputStream=httpEntity.getContent();8.循環(huán)讀取服務(wù)器響應(yīng)。將從InputStream對象中讀取出的字符元素賦值給整型對象b,一般來說賦值的結(jié)果不可能是-1,只有當(dāng)InputSt
34、ream對象讀完時才會得到-1。在該循環(huán)里將整型對象b的內(nèi)容轉(zhuǎn)換成字符元素并追加給stringBuffer,注意此時字符元素對象b的內(nèi)容與從InputStream對象中讀取出的字符元素一致,這樣就實現(xiàn)了讀取服務(wù)器響應(yīng): int b;while (b=inputStream.read()!=-1) stringBuffer.append(char)b); 9.關(guān)閉輸入流: inputStream.close(); 10.創(chuàng)建一個JSONObject對象:JSONObject jsonObject=new JSONObject(); 11.將StringBuffer對象里的字符串轉(zhuǎn)換為JSONOb
35、ject對象:jsonObject=new JSONObject(stringBuffer.toString(); 12.返回該JSONObject對象:return jsonObject;4.3.3 getPoint()函數(shù)的實現(xiàn)1.定義兩個double數(shù)組,用于儲存經(jīng)緯度信息: Double lon=new Double(0); Double lat=new Double(0); 2.從JSONObject對象中取出代表緯度的"lng"的值,具體過程是:先得到”result”里的值,從值里取得第一個結(jié)果,在逐步往下”geometry”location”lng”,最終得到
36、"lng"里的值:lon=(JSONArray)jsonObject.get("results").getJSONObject(0).getJSONObject("geometry").getJSONObject("location").getDouble("lng");3.從JSONObject對象中取出代表經(jīng)度的"lat"的值,過程同上:lat=(JSONArray)jsonObject.get("results").getJSONObject(0).
37、getJSONObject("geometry").getJSONObject("location").getDouble("lat"); 4.將取得的經(jīng)緯度數(shù)據(jù)轉(zhuǎn)換成GeoPoint對象并返回: return new GeoPoint(int)(lat*1E6),(int)(lon*1E6);五、結(jié)果測試5.1啟動MapIII在Eclipse界面里選擇Run菜單,點擊Run Cunfigurations,彈出一個對話框。先看Android標(biāo)簽,在Project里找到要運行的項目MapIII并選中;在Target標(biāo)簽里,選擇之前建立的
38、AVD。點擊Run即可運行。如圖5.1和圖5.2。圖5.1選擇項目圖5.2選擇AVD5.2一些簡單的操作1.程序啟動后,得到如圖的結(jié)果。默認(rèn)的地圖是美國某城市,并且是是衛(wèi)星圖,如圖5.3。圖5.3默認(rèn)地圖2.點擊屏幕,出現(xiàn)控制放大和縮小的按鈕,可用其放大或縮小屏幕,如圖5.4。3.點擊“交通圖”按鈕,便可切換為交通圖,如圖5.5。點擊“衛(wèi)星圖”按鈕會回到衛(wèi)星圖。 圖5.4衛(wèi)星圖 圖5.5交通圖5.3測試通過經(jīng)緯度定位在相應(yīng)的輸入框中輸入香港某地的經(jīng)緯度(22.2806,114.1650),點擊“定位”按鈕,地圖便會跳轉(zhuǎn)到該地點,并在該點上顯示圖片和“定位的目標(biāo)”,如圖5.6和圖5.7。 圖5.
39、6經(jīng)緯度定位(衛(wèi)星圖) 圖5.7經(jīng)緯度定位(交通圖)5.4測試通過地名定位 在地址欄中輸入“合肥學(xué)院新區(qū)”,點擊“查找”按鈕,地圖便會跳轉(zhuǎn)到合肥學(xué)院新區(qū),如圖5.8和圖5.9所示。 圖5.8 地名搜索(衛(wèi)星圖) 圖5.9地名搜索(交通圖)5.5退出程序 點擊menu按鈕,在彈出的菜單中選擇“退出”,如圖5.10,程序便可結(jié)束。圖5.10退出菜單六、程序發(fā)布對于絕大部分開發(fā)者而言,編寫Android手機應(yīng)用程序的目的除了自娛自樂外,最重要的就是和別人分享,可以收費,也可以免費。Google已經(jīng)為此創(chuàng)建了一個Android電子市場。任何一款具有聯(lián)網(wǎng)功能的Android手機都可以打開Android電
40、子市場,其中有成千上萬的應(yīng)用程序可供用戶下載。在Android電子市場上發(fā)布自己的應(yīng)用程序之前,必須先對其進行簽名。事實上,在應(yīng)用程序的開發(fā)過程中就已經(jīng)在進行數(shù)字簽名了,當(dāng)每次通過Eclipse啟動應(yīng)用程序時Android SDK會自動為程序生成一個調(diào)試簽名。問題是調(diào)試簽名并不能用于在Android電子市場上發(fā)布應(yīng)用程序,必須專門為應(yīng)用程序的發(fā)布生成一個新的簽名。6.1生成keystore按照下面的命令行在C:Program FilesJavajdk1.6.0_30bin>目錄下,輸入:keytool -genkey -alias android.keystore -keyalg RSA
41、 -validity 100000 -keystore android.keystore,其中-validity主要是證書的有效期,本次設(shè)為100000天。然后依提示進行,空格和退格鍵都可作為密碼。如圖6.3所示。命令執(zhí)行后會在C:Program FilesJavajdk1.6.0_30bin>目錄下生成 android.keystore文件。圖6.1生成keystore6.2 eclipse生成apk文件1.選擇要打包的項目,右鍵點擊Android toolsExport Signed Application Package并選擇打包的項目。2.選擇生成的android.keystor
42、e文件并輸入密碼,如圖6.2。圖6.2選擇android.keystore文件并驗證3.再選擇alias key并輸入密碼,如圖6.3。圖6.3選擇alias key文件并驗證4.最后選擇生成Android apk文件的目錄及文件名,最終生成apk文件,如圖6.4。圖6.4最終的apk文件附錄:1.AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android=" package="chenzhen.mapiii&quo
43、t; android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:icon="drawable/ic_launcher" android:label="string
44、/app_name" > <uses-library android:name="com.google.android.maps" /> <activity android:name=".MapIIIActivity" android:label="string/app_name" > <intent-filter> <action android:name="ent.action.MAIN" /> <categoryand
45、roid:name="ent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>2. main.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" android:layout_width="fill_parent" and
46、roid:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="+id
47、/editText01" android:layout_width="135dp" android:layout_height="wrap_content" android:text="string/editText01" /> <EditText android:id="+id/editText02" android:layout_width="135dp" android:layout_height="wrap_content" android:te
48、xt="string/editText02" /> <Button android:id="+id/button01" android:layout_width="50dp" android:layout_height="wrap_content" android:text="string/button01" /> </LinearLayout> <LinearLayout xmlns:android=" android:layout_width=&
49、quot;fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:id="+id/textView01" android:layout_width="50dp" android:layout_height="wrap_content" android:text="string/textView01" /&g
50、t; <EditText android:id="+id/editText03" android:layout_width="220dp" android:layout_height="wrap_content" android:text="string/editText03" /> <Button android:id="+id/button02" android:layout_width="50dp" android:layout_height=&quo
51、t;wrap_content" android:text="string/button02" /> </LinearLayout> <LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:id="+i
52、d/textView02" android:layout_width="60dp" android:layout_height="wrap_content" android:text="string/textView02" /> <Button android:id="+id/button03" android:layout_width="80dp" android:layout_height="wrap_content" android:text=&q
53、uot;string/button03" /> <Button android:id="+id/button04" android:layout_width="80dp" android:layout_height="wrap_content" android:text="string/button04" /> </LinearLayout> <com.google.android.maps.MapViewandroid:id="+id/mapView&quo
54、t;android:layout_width="fill_parent"android:layout_height="wrap_content"android:clickable="true"android:apiKey="0avAw-1ozxNMipBtFVOv-v9zzbSNrxLcMqhp_DA"/> </LinearLayout>3.strings.xml<?xml version="1.0" encoding="utf-8"?><
55、resources> <string name="hello">Hello World, MapIIIActivity!</string> <string name="app_name">MapIII</string> <string name="editText01">請?zhí)钊刖暥?lt;/string> <string name="editText02">請?zhí)钊虢?jīng)度</string> <string name=&
56、quot;button01">定位</string> <string name="textView01">地址:</string> <string name="editText03">合肥學(xué)院新區(qū)</string> <string name="button02">查找</string> <string name="exit">退出</string> <string name="textView02">地圖切換:</string> <string name="button03">衛(wèi)星圖</string> <string name="button04">交通圖</string><
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國企業(yè)孵化器行業(yè)發(fā)展監(jiān)測及發(fā)展趨勢預(yù)測報告
- 2025年中國皮箱包袋市場深度調(diào)查評估及投資方向研究報告
- 蘇州江蘇蘇州城市學(xué)院選聘中層崗位人員5人筆試歷年參考題庫附帶答案詳解
- 2025年度新能源電動汽車充電服務(wù)充值卡銷售合同4篇
- 2025年度民間汽車質(zhì)押借款互聯(lián)網(wǎng)金融服務(wù)合同范本4篇
- 2025年度魚塘租賃與漁業(yè)產(chǎn)業(yè)升級合作協(xié)議3篇
- 2025年中國金粉膠行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025年度門衛(wèi)室智能化安防解決方案合同4篇
- 2025年中國汽車門鎖行業(yè)市場全景監(jiān)測及投資戰(zhàn)略咨詢報告
- 二零二五版服裝企業(yè)員工工資支付方式合同范本3篇
- 物業(yè)民法典知識培訓(xùn)課件
- 2023年初中畢業(yè)生信息技術(shù)中考知識點詳解
- 2024-2025學(xué)年山東省德州市高中五校高二上學(xué)期期中考試地理試題(解析版)
- 《萬方數(shù)據(jù)資源介紹》課件
- 麻風(fēng)病病情分析
- 《急診科建設(shè)與設(shè)備配置標(biāo)準(zhǔn)》
- 第一章-地震工程學(xué)概論
- JJF(陜) 063-2021 漆膜沖擊器校準(zhǔn)規(guī)范
- 《中國糖尿病防治指南(2024版)》更新要點解讀
- TSGD7002-2023-壓力管道元件型式試驗規(guī)則
- 2024年度家庭醫(yī)生簽約服務(wù)培訓(xùn)課件
評論
0/150
提交評論