Android開發:LocationManager擷取經緯度及定位過程(附demo)

來源:互聯網
上載者:User

標籤:style   ati   override   context   font   request   ext   無法定位   無法   

在Android開發其中。常常須要用到定位功能,尤其是依賴於地理位置功能的應用。非常多人喜歡使用百度地圖,高德地圖提供的sdk。開放API,可是在只須要經緯度,或者城市,街道地址等資訊。並不須要提供預覽地圖。地圖介面的應用中。這時,不須要使用百度地圖。高德地圖。這樣做只會添加apk的體積。怎麼辦呢?

事實上LocationManager,Geocoder這些Android API給我們提供的這些類就能夠滿足了。

以下筆者就來講講怎樣利用LocationManager擷取經緯度,並利用Geocoder將經緯度轉換為城市街道等資訊。


LocationManager

LocationManager定位管理者執行個體通過getSystemService()方式獲得

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

得到LocationManager執行個體後,再結合LocationProvider就能夠得到經緯度了,LocationProvider分為兩種:

LocationProvider gpsProvider = locationManager.getProvider(LocationManager.GPS_PROVIDER);//1.通過GPS定位,較精確。也比較耗電LocationProvider netProvider = locationManager.getProvider(LocationManager.NETWORK_PROVIDER);//2.通過網路定位。對定位精度度不高或省點情況可考慮使用

進行定位前,須要對兩種LocationProvider是否存在進行推斷:

if (locationManager.getProvider(LocationManager.NETWORK_PROVIDER) != null || locationManager.getProvider(LocationManager.GPS_PROVIDER) != null) {       /** 進行定位        * provider:用於定位的locationProvider字串:LocationManager.NETWORK_PROVIDER/LocationManager.GPS_PROVIDER* minTime:時間更新間隔。單位:ms        * minDistance:位置重新整理距離,單位:m* listener:用於定點更新的監聽者locationListener*/        locationManager.requestLocationUpdates(provider, minTime, minDistance, listener);} else {        //無法定位:1、提示使用者開啟定位服務;2、跳轉到設定介面Toast.makeText(this, "無法定位,請開啟定位服務", Toast.LENGTH_SHORT).show();Intent i = new Intent();i.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);startActivity(i);}
當LocationProvider不為空白null時,進行定位,當它為空白時。提示使用者開啟定位服務,在代碼中進行了跳轉。供使用者勾選。


LocationListener

在定位時。須要實現一個LocationListener位置監聽介面,主要是重寫onLocaiontChanged()方法

/** * 位置改變回調方法 * @param location 當前的位置 * @return void */public void onLocationChanged(Location location){//得到緯度double latitude = location.getLatitude();//得到經度double longitude = location.getLongitude();} 

其它須要重寫的方法有:

@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {// TODO Auto-generated method stub}@Overridepublic void onProviderEnabled(String provider) {// TODO Auto-generated method stub}@Overridepublic void onProviderDisabled(String provider) {// TODO Auto-generated method stub}


Geocoder

Geocoder經緯度解碼者可用於將經緯度轉為具體位置資訊:國家,城市,街道名稱等

Geocoder gc = new Geocoder(this, Locale.getDefault());List<Address> locationList = null;try {locationList = gc.getFromLocation(latitude, longitude, 1);} catch (IOException e) {e.printStackTrace();}Address address = locationList.get(0);//得到Address執行個體//Log.i(TAG, "address =" + address);String countryName = address.getCountryName();//得到國家名稱,比方:中國Log.i(TAG, "countryName = " + countryName);String locality = address.getLocality();//得到城市名稱,比方:北京市Log.i(TAG, "locality = " + locality);for (int i = 0; address.getAddressLine(i) != null; i++) {String addressLine = address.getAddressLine(i);//得到周邊資訊。包含街道等。i=0,得到街道名稱Log.i(TAG, "addressLine = " + addressLine);}

 最後,別忘記加入許可權:

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />    <uses-permission android:name="android.permission.INTERNET" />


修正:

文中的if (locationManager.getProvider(LocationManager.NETWORK_PROVIDER) != null || locationManager.getProvider(LocationManager.GPS_PROVIDER) != null)

這個推斷請改為:

if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) || locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))


demo:http://download.csdn.net/detail/xiong_it/8916215。

轉載請註明原xiong_it和原文連結:http://blog.csdn.net/xiong_it/article/details/46968477。謝謝!


Android開發:LocationManager擷取經緯度及定位過程(附demo)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.