1. 程式人生 > >Android使用Google提供的地圖實現定位時LocationListener的各個方法

Android使用Google提供的地圖實現定位時LocationListener的各個方法

from:http://blog.sina.com.cn/s/blog_6ba1ab350100wsm5.html

 Android中LocationManager的提供了一系列方法來地理位置相關的問題,包括查詢上一個已知位置;註冊/登出來自某個 LocationProvider的週期性的位置更新;以及註冊/登出接近某個座標時對一個已定義Intent的觸發等。今天我們就來看看Android 中LocatinManager的簡單使用,以獲取當前所在的位置為例。


首先,我們需要獲取LocationManager的一個例項,這裡需要注意的是他的例項只能通過下面這種方式來獲取,直接例項化LocationManager是不被允許的。


Java程式碼
  1. LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);  


得到了LocationManager的例項locatonManager以後,我們通過下面的語句來註冊一個週期性的位置更新。
Java程式碼
  1. locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,   
  2. 10000, locationListener);  


這句程式碼告訴系統,我們需要從GPS獲取位置資訊,並且是每隔1000ms更新一次,並且不考慮位置的變化。最後一個引數是LocationListener的一個引用,我們必須要實現這個類。


Java程式碼
  1. privatefinal LocationListener locationListener = new LocationListener() {   
  2. publicvoid onLocationChanged(Location location) { //當座標改變時觸發此函式,如果Provider傳進相同的座標,它就不會被觸發 
  3. // log it when the location changes 
  4. if (location != null) {   
  5.             Log.i("SuperMap""Location changed : Lat: "
  6.               + location.getLatitude() + 
    " Lng: "
  7.               + location.getLongitude());   
  8.         }   
  9.     }   
  10. publicvoid onProviderDisabled(String provider) {   
  11. // Provider被disable時觸發此函式,比如GPS被關閉 
  12.     }   
  13. publicvoid onProviderEnabled(String provider) {   
  14. //  Provider被enable時觸發此函式,比如GPS被開啟 
  15.     }   
  16. publicvoid onStatusChanged(String provider, int status, Bundle extras) {   
  17. // Provider的轉態在可用、暫時不可用和無服務三個狀態直接切換時觸發此函式 
  18.     }   
  19. };  


以上的這些步驟一般應當在Activity的onCreate()階段完成。

在成功註冊了一個週期性座標更新以後,我們就隨時可以通過下面的方法來取得當前的座標了。
Java程式碼
  1. Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);   
  2. double latitude = location.getLatitude();     //經度 
  3. double longitude = location.getLongitude(); //緯度 
  4. double altitude =  location.getAltitude();     //海拔

不過這時候,如果你嘗試去執行這個LocationSample的話程式啟動時多半就會報錯,因為我們沒有設定GPS相關的許可權,解決方法也相當簡單,在AndroidManifest.xml中的block裡新增下面這句即可解決許可權的問題。詳細的許可權設定,請參考官方文件docs/reference/android/Manifest.permission.html
Java程式碼
  1. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />