Android中LocationManager的提供了一系列方法來地理位置相關的問題,包括查詢上一個已知位置;註冊/註銷來自某個 LocationProvider的週期性的位置更新;以及註冊/註銷接近某個座標時對一個已定義Intent的觸發等。今天咱們就來看看Android 中LocatinManager的簡單使用,以獲取當前所在的位置爲例。html
首先,咱們須要獲取LocationManager的一個實例,這裏須要注意的是他的實例只能經過下面這種方式來獲取,直接實例化LocationManager是不被容許的。java
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);android
獲得了LocationManager的實例locatonManager之後,咱們經過下面的語句來註冊一個週期性的位置更新。git
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
1000, 0, locationListener);eclipse
這句代碼告訴系統,咱們須要從GPS獲取位置信息,而且是每隔1000ms更新一次,而且不考慮位置的變化。最後一個參數是LocationListener的一個引用,咱們必需要實現這個類。ide
private final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) { //當座標改變時觸發此函數,若是Provider傳進相同的座標,它就不會被觸發
// log it when the location changes
if (location != null) {
Log.i("SuperMap", "Location changed : Lat: "
+ location.getLatitude() + " Lng: "
+ location.getLongitude());
}
}函數
public void onProviderDisabled(String provider) {
// Provider被disable時觸發此函數,好比GPS被關閉
}spa
public void onProviderEnabled(String provider) {
// Provider被enable時觸發此函數,好比GPS被打開
}插件
public void onStatusChanged(String provider, int status, Bundle extras) {
// Provider的轉態在可用、暫時不可用和無服務三個狀態直接切換時觸發此函數
}
};命令行
以上的這些步驟通常應當在Activity的onCreate()階段完成。
在成功註冊了一個週期性座標更新之後,咱們就隨時能夠經過下面的方法來取得當前的座標了。
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
double latitude = location.getLatitude(); //經度
double longitude = location.getLongitude(); //緯度
double altitude = location.getAltitude(); //海拔
不過這時候,若是你嘗試去運行這個LocationSample的話程序啓動時多半就會報錯,由於咱們沒有設置GPS相關的權限,解決方法也至關簡單,在AndroidManifest.xml中的block裏添加下面這句便可解決權限的問題。詳細的權限設置,請參考官方文檔docs/reference/android/Manifest.permission.html
若是是在模擬器中調試的話,咱們有兩種方法來設置一個模擬的座標值,第一種是經過DDMS,咱們能夠在eclipse的ADT插件中使用這種方法,只要打開"Window" --> "Show View" 中打開"Emulator Control" View便可看到以下的設置窗口,咱們能夠手動,或者經過KML和GPX文件來設置一個座標。
另外一種方法是使用geo命令,咱們須要telnet到本機的5554端口,而後在命令行下輸入相似於 geo fix -121.45356 46.51119 4392 這樣的命令,後面三個參數分別表明了經度、緯度和(可選的)海拔。