第9章 Android位置服務(wù).pptx_第1頁(yè)
第9章 Android位置服務(wù).pptx_第2頁(yè)
第9章 Android位置服務(wù).pptx_第3頁(yè)
第9章 Android位置服務(wù).pptx_第4頁(yè)
第9章 Android位置服務(wù).pptx_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第九章 Android位置服務(wù)與地圖應(yīng)用,本章目標(biāo):,了解位置服務(wù) 掌握Google地圖應(yīng)用 了解XML的解析,9.1 位置服務(wù),位置服務(wù)(Location Based Services,LBS),又稱定位服務(wù)或基于位置的服務(wù),融合了GPS定位、移動(dòng)通信、導(dǎo)航等多種技術(shù),提供了與空間位置相關(guān)的綜合應(yīng)用服務(wù)。位置服務(wù)首先在日本得到商業(yè)化的應(yīng)用。2001年7月,DoCoMo發(fā)布了第一款具有三角定位功能的手持設(shè)備,2001年12月,KDDI發(fā)布第一款具有GPS功能的手機(jī)。近些年來,基于位置的服務(wù)發(fā)展更加迅速,涉及到商務(wù)、醫(yī)療、工作和生等各個(gè)方面,為用戶提供定位、追蹤和敏感區(qū)域警告等一系列服務(wù)。 An

2、droid平臺(tái)支持提供服務(wù)的API,在開發(fā)過程中主要用到LocationManager和LocationProviders對(duì)象。LocationManager可以用來獲取當(dāng)前的位置,追蹤設(shè)備的移動(dòng)路線,或設(shè)定敏感區(qū)域,在進(jìn)入或者離開敏感區(qū)域時(shí)設(shè)備會(huì)發(fā)出特定警報(bào)。LocationProviders則是能夠提供定位功能的組件集合,集合中的每種組件以不同的技術(shù)提供設(shè)備的當(dāng)前位置,區(qū)別在于定位的精度、速度和成本等方面。,9.1 位置服務(wù),為了使開發(fā)的程序能夠提供位置服務(wù),首先需要獲得LocatioManager對(duì)象。獲取LocatioManager可以通過調(diào)用android.app.Activity.

3、getSystemService()函數(shù)實(shí)現(xiàn),代碼如下: String serviceString = Context.LOCATION_SERVICE; LocationManager LocationManager = (LocationManager)getSystemService(serviceString); 代碼中的Context.LOCATION_SERVICE指明獲取的服務(wù)是位置服務(wù),getSystemService()函數(shù),可以根據(jù)服務(wù)名稱獲取Android提供的系統(tǒng)級(jí)服務(wù)。,表9-1 Android支持的系統(tǒng)級(jí)服務(wù)表,9.1 位置服務(wù),在獲得LocationManager

4、后,還需要指定LocationManager的定位方法,然后才能夠調(diào)用LocationManager.getLastKnowLocation()方法獲取當(dāng)前位置。目前LocationManager支持的定位方法有兩種,分別是使用GPS定位和使用網(wǎng)絡(luò)定位。GPS定位可以提供更加精確的位置信息,但定位速度和質(zhì)量受到衛(wèi)星數(shù)量和環(huán)境情況的影響;網(wǎng)絡(luò)定位提供的位置信息精度較差,但速度較GPS定位快。,表9-2 LocationManager支持定位方法表,9.1 位置服務(wù),在指定LocationManager的定位方法后,則可以調(diào)用getLastKnowLocation()方法獲取當(dāng)前的位置信息。以使用

5、GPS定位為例,獲取位置信息的代碼如下: String provider = LocationManager.GPS_PROVIDER; Location location = locationManager.getLastKnownLocation(provider); 代碼中返回的Location對(duì)象中,包含了可以確定位置的信息,如經(jīng)度、緯度和速度等,用戶可以通過調(diào)用Location中的getLatitude()和getLonggitude()方法分別獲取位置信息中的緯度和經(jīng)度,示例代碼如下: double lat = location.getLatitude(); double lng

6、= location.getLongitude();,9.1 位置服務(wù),在很多提供定位服務(wù)的應(yīng)用程序中,不僅需要獲取當(dāng)前的位置信息,還需要監(jiān)視位置的變化,在位置變化時(shí)調(diào)用特定的處理方法。LocationManager提供了一種便捷、高效的位置監(jiān)視方法requestLocationUpdates(),可以根據(jù)位置的距離變化和時(shí)間間隔設(shè)定產(chǎn)生位置改變事件的條件,這樣可以避免因微小的距離變化而產(chǎn)生大量的位置改變事件。LocationManaget中設(shè)定監(jiān)聽位置變化的代碼如下: locationManager.requestLocationUpdates(provider, 2000, 10, loc

7、ationListener); 方法中的第1個(gè)參數(shù)是定位的方法,GPS定位或網(wǎng)絡(luò)定位;第2個(gè)參數(shù)是產(chǎn)生位置改變事件的時(shí)間間隔,單位為微秒;第3個(gè)參數(shù)是距離條件,單位是米;第4個(gè)參數(shù)是回調(diào)函數(shù),是在滿足條件后的位置改變事件的處理函數(shù)。上面的代碼將產(chǎn)生位置改變事件的條件設(shè)定距離改變?yōu)?0米,時(shí)間間隔為2秒。,9.1 位置服務(wù),實(shí)現(xiàn)locationListener代碼如下: LocationListener locationListener = new LocationListener() public void onLocationChanged(Location location) public

8、 void onProviderDisabled(String provider) public void onProviderEnabled(String provider) public void onStatusChanged(String provider, int status, Bundle extras) ; 代碼中的onLocationChanged()在設(shè)備的位置改變時(shí)被調(diào)用;onProviderDisabled()在用戶禁用具有定位功能的硬件時(shí)被調(diào)用; onProviderEnabled()在用戶啟用具有定位功能的硬件時(shí)被調(diào)用; onStatusChanged()在提供定位

9、功能的硬件的狀態(tài)改變時(shí)被調(diào)用,如從不可獲取位置信息狀態(tài)到可以獲取位置信息的狀態(tài),反之亦然。 最后,為了使GPS定位功能生效,還需要在AndroidManifest.xml文件中加入用戶許可,代碼如下: ,9.2.1 申請(qǐng)地圖密鑰,為了在手機(jī)中更直觀地顯示地理信息,程序開發(fā)人員可以直接使用Google提供的地圖服務(wù),實(shí)現(xiàn)地理信息的可視化開發(fā)。只要使用MapView(com.google.android.maps.MapView)就可以將Google地圖嵌入到Android應(yīng)用程序中。但在使用MapView進(jìn)行開發(fā)前,必須向Google申請(qǐng)一組經(jīng)過驗(yàn)證的“地圖密鑰(Map API KEY)”,才能

10、正常使用Google的地圖服務(wù)?!暗貓D密鑰”是訪問Google地圖數(shù)據(jù)的密鑰,無論是模擬器還是在真實(shí)設(shè)備中都需要使用這個(gè)密鑰。 注冊(cè)“地圖密鑰”的第一步是申請(qǐng)一個(gè)Google賬戶,也就是Gmail電子郵箱,申請(qǐng)地址,9.2.1 申請(qǐng)地圖密鑰,在得到Google賬戶之后,下一步工作是找到保存Debug證書的keystore的保存位置,并獲取證書的MD5散列值。keystore是一個(gè)密碼保護(hù)的文件,用來存儲(chǔ)Android提供的用于調(diào)試的證書,獲取MD5散列值的主要目的是為下一步申請(qǐng)“地圖密鑰”做準(zhǔn)備。獲取證書的保存地址如圖9-3所示,首先打開Eclipse,通過windowsPreferences

11、打開配置窗體,在AndroidBuild欄中的Default debug keystore中可以找到。 為了獲取Debug證書的MD5散列值,需要打開命令行工具CMD,然后切換到keystore的目錄,輸入如下命令: keytool list keystore debug.keystore 如果提示無法找到keytool,可以將/bin的路徑添加到系統(tǒng)的PATH變量中。在提示輸入keystore密碼時(shí),輸入默認(rèn)密碼android,MD5散列值將顯示在最下方。如圖9-4所示,每臺(tái)電腦的MD5散列值都不一樣,這個(gè)一定要引起讀者注意。筆者的MD5散列值為68:76:89:C8:A4:24:61:F9

12、:EA:F3:F7:70:CC:FD:C8:15。,9.2.1 申請(qǐng)地圖密鑰,申請(qǐng)“地圖密鑰”的最后一步是打開申請(qǐng)頁(yè)面,輸入MD5散列值。申請(qǐng)頁(yè)面的地址是: ,9.2.1 申請(qǐng)地圖密鑰,輸入MD5散列值后,單擊Generate API Key按鈕,將提示用戶輸入Google賬戶,正確輸入Google賬戶后,將產(chǎn)生申請(qǐng)“地圖密鑰”的獲取結(jié)果,如圖9-6所示。,9.2.2 使用Google地圖,在申請(qǐng)到“地圖密鑰”后,下面考慮如何在Android系統(tǒng)中顯示和控制Google地圖。MapView是地圖顯示控件,可以設(shè)置不同顯示模式,例如衛(wèi)星模式、街道模式或交通模式。而MapController則是M

13、apView的控制器,可以控制MapView的顯示中心和縮放級(jí)別等功能。 下面的內(nèi)容以GoogleMapDemo為例,說明如何在Android系統(tǒng)中開發(fā)Google地圖程序。這個(gè)示例將在程序內(nèi)部設(shè)置一個(gè)坐標(biāo)點(diǎn),然后在程序啟動(dòng)時(shí)你,使用MapView控件在地圖上顯示這個(gè)坐標(biāo)點(diǎn)的位置。 因?yàn)槠胀ǖ腁ndroid程序并不包含支持Google地圖開發(fā)的擴(kuò)展庫(kù),因此應(yīng)在建立工程時(shí)將com.google.android.maps的擴(kuò)展庫(kù)添加到工程中,這樣就可以使用Google地圖的所有功能了,添加com.google.android.maps擴(kuò)展庫(kù)的擴(kuò)展方式是在創(chuàng)建工程時(shí),在Buid Target選項(xiàng)中選

14、擇Google APIs,9.2.3 Google地圖上貼上標(biāo)記,本節(jié)講一個(gè)在Google地圖某一個(gè)固定的經(jīng)緯度上貼上相應(yīng)的標(biāo)記。在前面的章節(jié)中,我們接觸了如何與Google地圖服務(wù)系統(tǒng)的互動(dòng),但是我們更希望在地圖上貼上自己的標(biāo)記和注釋,這需要可以在地圖上覆蓋一些對(duì)象。要做到這一點(diǎn),首先要實(shí)現(xiàn)一個(gè)ItemizedOverlay類,他可以管理一套覆蓋項(xiàng)目功能,下面我們通過一個(gè)簡(jiǎn)單的案例來學(xué)習(xí)這個(gè)知識(shí)點(diǎn)的應(yīng)用。 建立一個(gè)Android項(xiàng)目,名稱為HelloMapView。需要的圖標(biāo)拷貝到相應(yīng)的資源文件內(nèi),項(xiàng)目里面包含兩個(gè)類文件,分別是HelloItemizedOverlay.java和HelloM

15、apView.java。下面對(duì)這個(gè)項(xiàng)目的完成進(jìn)行詳細(xì)的介紹。,9.2.3 Google地圖上貼上標(biāo)記,實(shí)現(xiàn)一個(gè)ItemizedOverlay類程序HelloItemizedOverlay.java需要建立以下四個(gè)方法: public HelloItemizedOverlay(Drawable defaultMarker) public void addOverlay(OverlayItem overlay) protected OverlayItem createItem(int i) public int size() 請(qǐng)按下列步驟來實(shí)現(xiàn)HelloItemizedOverlay.java程序

16、: 建立一個(gè)新的Android應(yīng)用程序HelloMapView。并在src文件夾建立Java類HelloItemizedOverlay來實(shí)現(xiàn)ItemizedOverlay。 2、首先要先建立一個(gè)OverlayItem ArrayList數(shù)組,這個(gè)數(shù)組可以放置所有要貼在地圖上的標(biāo)記對(duì)象。 private ArrayList mOverlays = new ArrayList();,9.2.3 Google地圖上貼上標(biāo)記,構(gòu)造方法會(huì)定義每一個(gè)被使用OverlayItems的默認(rèn)標(biāo)記,為了使Drawable標(biāo)記可以貼上,必須界定它的范圍。地圖坐標(biāo)上的標(biāo)記希望貼在地圖底部的中心點(diǎn),使用boundCenterBottom()方法來處理,defaultMarker會(huì)被super調(diào)用。參考代碼如下: super(boundCenterBottom(defaultMarker); 為了要增加一個(gè)新的OverlayItem 到ArrayList數(shù)組上,我們?cè)赼ddOverlay()方法中加入下列代碼: mOverlays.add(overlay); populate(); 每一次增加一個(gè)新的Overlay

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論