Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發:LocationManager獲取經緯度及定位過程(附demo)

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

編輯:關於Android編程

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

 

其實LocationManager,Geocoder這些Android API給我們提供的這些類就可以滿足了。下面筆者就來講講如何利用LocationManager獲取經緯度,並利用Geocoder將經緯度轉換為城市街道等信息。

 

LocationManager

LocationManager實例通過getSystemService()方式獲得

 

locationManager = (LocationManager) getSystemService(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字符串
	* 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();
} 

其他需要重寫的方法有:

 

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

@Override
public void onProviderEnabled(String provider) {
	// TODO Auto-generated method stub
	
}

@Override
public void onProviderDisabled(String provider) {
	// TODO Auto-generated method stub
		
}

 

Geocoder

Geocoder可用於將經緯度轉為詳細位置信息

 

Geocoder gc = new Geocoder(this, Locale.getDefault());
List 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);
}

最後,別忘記添加權限:

 

    
    
    
  
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved