轉自我的新浪博文
蘇仙網站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網頁設計、網站建設、微信開發(fā)、APP開發(fā)、成都響應式網站建設公司等網站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)公司于2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選成都創(chuàng)新互聯(lián)公司。在Android的位置服務中,有兩個重要的類LocationManager和LocationProvider,提供了一系列方法來處理與位置相關的問題,包括查詢一個已知位置;注冊(注銷)來自某個LocationProvider的周期性的位置更新;以及注冊(注銷)接近某個坐標時對一個已定義Intent的觸發(fā)等。
Android的地理定位系統(tǒng)的API位于android.location包內,其中包含了以下幾個重要的功能類:
1、LocationManager:
本類提供訪問定位服務的功能,另外也提供獲取最佳定位提供者的功能。
2、LocationProvider:
該類是定位提供者的抽象類。定位提供者具備周期性報告設備地理位置的功能。
3、Criteria:
可譯為標準、規(guī)則,用于在可以獲得的LocationProvider列表中獲取合適的定位提供者。不同的定位提供者具有不同的精確度、靈敏度等指標,通過定義Criteria并設置其屬性,可以選擇合適的定位提供者。
4、LocationListener:
提供定位信息發(fā)生改變時的回調功能。必須事先在定位管理器中注冊監(jiān)聽器對象。
5、Geocoder:
用于處理地理編碼和反向地理編碼的類。地理編碼是指將地址或其他描述轉變?yōu)榻浂群途暥?,反向地理編碼則是將經度和緯度轉變?yōu)榈刂坊蛎枋稣Z言,其中包含了兩個構造函數(shù),需要傳入經度和緯度的坐標。
要使用地理定位,首先需要取得LocationManager的實例,在Android中,獲得LocationManager的唯一方法是通過getSystemService方法的調用。
String serviceName = Context.LOCATION_SERVICE;
LocationManager locationManager = (LocationManager) getSystemService(serviceName);
通過使用LocationManager,我們可以獲得一個位置提供者的列表。在一個真實的手持設備中,這個列表包含了一些GPS服務(或基于網絡的位置信息服務等)。我們可以通過設置一些標準來選擇合適的位置提供者:
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);【高精確度】
criteria.setAltitudeRequired(false); 【設置是否需要高度信息】
criteria.setBearingRequired(false);【設置是否需要方位信息】
criteria.setCostAllowed(true);【設置是否允許產生費用】
criteria.setPowerRequirement(Criteria.POWER_LOW);【設置耗電的高低】
String provider = locationManager.getBestProvider(criteria, true);
當然,我們也可以直接選擇更強大、更精確、不帶其他附加服務的GPS:
String provider = LocationManager.GPS_PROVIDER;
得到了LocationManager的實例以后,我們通過下面的語句來注冊一個周期性的位置更新:
private static final int step = 2000; 【2s】
......
locationManager.requestLocationUpdates(provider, step, 0, locationListener);
其中第一個參數(shù)是設置服務提供者,第二個參數(shù)是周期,第三個參數(shù)是以米為單位的最小位置變化,最后一個參數(shù)locationListener,是用來監(jiān)聽定位信息的改變。
這句代碼告訴系統(tǒng),我們需要從位置提供者(如GPS)獲取位置信息,并且是每隔2000ms更新一次,不考慮最小位置變化。
locationListener必須要實現(xiàn)如下方法:
1、onLocationChanged(Location location)
當坐標改變時候觸發(fā)該函數(shù),如果Provider傳相同的坐標,它就不會觸發(fā)。
2、onProviderDisabled(String provider)
Provider禁用時觸發(fā)此函數(shù),比如GPS被關閉。
3、onProviderEnabled(String provider)
Provider啟用時觸發(fā)此函數(shù),比如GPS被打開。
4、onStatusChanged(String provider, int status, Bundle extras)
Provider的狀態(tài)在可用、暫時不可用和無服務三個狀態(tài)直接切換時觸發(fā)此函數(shù)。
要使用定位的API,還需要在AndroidManifest.xml文件中添加其權限:
如果在模擬器上測試,需要人為的設置一個坐標。有兩種方法來設置一個模擬的坐標值。第一種方法是通過DDMS,我們可用在Eclipse的ADT插件中使用這種方法,只要啟動Eclipse,選擇“Window”->“Show View”,打開“Emulator Control”界面,手動或者通過KML和GPX文件來設置一個坐標:
另外一種方法使用geo命令。我們需要telnet到本機的5554端口,然后在命令行輸入類似以下命令:
geo fix -121.45365 46.51119 4392
后面三個參數(shù)分別是經度、緯度和(可選)海拔。設置后再Android模擬器屏幕上便多出了一個如下圖所示的標志,表示模擬了GPS權限:
使用telnet命令的示意圖如下:
示例代碼下載
參考文章:
《Android應用開發(fā)揭秘》
android 模擬器上GPS的使用
android GPS定位系統(tǒng)
Android:GPS衛(wèi)星定位
初探Android平臺上的定位服務(GPS)
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。