主題:[原創]Android中LocationManager的簡單使用,擷取當前位置

來源:互聯網
上載者:User

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

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

Java代碼
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);  

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

得到了LocationManager的執行個體locatonManager以後,我們通過下面的語句來註冊一個周期性的位置更新。
Java代碼
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,   
 1000, 0, locationListener);  

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);

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

Java代碼
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被關閉   
    }   
  
    public void onProviderEnabled(String provider) {   
    //  Provider被enable時觸發此函數,比如GPS被開啟   
    }   
  
    public void onStatusChanged(String provider, int status, Bundle extras) {   
    // Provider的轉態在可用、暫時不可用和無服務三個狀態直接切換時觸發此函數   
    }   
};  

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被關閉    }    public void onProviderEnabled(String provider) {    //  Provider被enable時觸發此函數,比如GPS被開啟    }    public void onStatusChanged(String provider, int status, Bundle extras) {    // Provider的轉態在可用、暫時不可用和無服務三個狀態直接切換時觸發此函數    }};

以上的這些步驟一般應當在Activity的onCreate()階段完成。
在成功註冊了一個周期性座標更新以後,我們就隨時可以通過下面的方法來取得當前的座標了。
Java代碼
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);   
double latitude = location.getLatitude();     //經度   
double longitude = location.getLongitude(); //緯度   
double altitude =  location.getAltitude();     //海拔  

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

Java代碼
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

如果是在模擬器中調試的話,我們有兩種方法來設定一個類比的座標值,第一種是通過DDMS,我們可以在eclipse的ADT外掛程式中使用這種方法,只要開啟"Window" --&gt; "Show View" 中開啟"Emulator Control" View即可看到如下的設定視窗,我們可以手動,或者通過KML和GPX檔案來設定一個座標。


另一種方法是使用geo命令,我們需要telnet到原生5554連接埠,然後在命令列下輸入類似於 geo fix -121.45356 46.51119 4392 這樣的命令,後面三個參數分別代表了經度、緯度和(可選的)海拔。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.