1.位置服務的簡介:位置服務,英文翻譯爲Location-Based Services,縮寫爲LBS,又稱爲定位服務或基於位置的服務,融合了GPS定位、移動通訊、導航等多種技術,提供與空間位置相關的綜合應用服務,基於位置的服務發展很迅速,涉及商務、醫療、工做和生活的各個方面,爲用戶提供定位、追蹤和敏感區域警告等一系列服務。好比谷歌地圖,百度地圖,都須要經過位置服務。android
2.Android平臺下支持提供位置服務的API,在開發過程當中主要用到LocationManager和LocationProviders對象:git
(1).LocationManager能夠用來獲取當前的位置,追蹤設備的移動路線,或設定敏感區域,在進入或離開敏感區域時設備會發出特定警報 。網絡
(2).LocationProviders則是提供定位功能的組件集合,集合中的每種組件以不一樣的技術提供設備的當前位置,區別在於定位的精度、速度和成本等方面 。app
3.接下來將講述一個如何實現獲取位置的經緯度,而且若是位置改變,如何經過位置的改變,經緯度也發生變化的例子,這裏以LocationManager對象爲例:ide
(1).首先,第一步,獲取LocationManager對象,能夠經過調用android.app.Activity.getSystemService()函數獲取,代碼以下:函數
String serviceString = Context.LOCATION_SERVICE;// 獲取的是位置服務 LocationManager locationManager = (LocationManager) getSystemService(serviceString);// 調用getSystemService()方法來獲取LocationManager對象
其中的LOCATION_SERVICE是Android支持的系統級服務,控制位置等設備的更新。spa
(2).在獲取到LocationManager對象後,還須要指定LocationManager的定位方法 ,而後纔可以調用LocationManager.getLastKnowLocation()方法獲取當前位置 ,目前LocationManager主要有兩種定位方法翻譯
GPS定位:能夠提供更加精確的位置信息,但定位速度和質量受到衛星數量和環境狀況的影響,須要android.permissions.ACCESS_FINE_LOCATION用戶權限。code
網絡定位:提供的位置信息精度差,但速度較GPS定位要迅速 ,利用基站或WiFi訪問的提供近似的位置信息,須要具備以下權限:android.permission.ACCESS_COARSE_LOCATION 或 android.permission.ACCESS_FINE_LOCATION。xml
注:(使用GPS定位和網絡定位的LocationManager類的靜態常量不同,GPS定位的LocationManager類的靜態常量爲:GPS_PROVIDER,網絡定位的LocationManager類的靜態常量爲:NETWORK_PROVIDER,這兩個靜態常量在獲取當前位置時要用到。)
下面以使用GPS定位爲例,獲取位置信息代碼以下:
String provider = LocationManager.GPS_PROVIDER;// 指定LocationManager的定位方法 Location location = locationManager.getLastKnownLocation(provider);// 調用getLastKnownLocation()方法獲取當前的位置信息
(3).經過調用Location中的getLatitude()和getLonggitude()方法能夠分別獲取位置信息中的緯度和經度,代碼以下:
double lat = location.getLatitude();//獲取緯度 double lng = location.getLongitude();//獲取經度
(4).在不少提供定位服務的應用程序中,不只須要獲取當前的位置信息,還須要監視位置的變化,在位置改變時調用特定的處理方法 ,其中LocationManager提供了一種便捷、高效的位置監視方法requestLocationUpdates(),能夠根據位置的距離變化和時間間隔設定,產生位置改變事件的條件,這樣能夠避免因微小的距離變化而產生大量的位置改變事件 ,LocationManager中設定監聽位置變化的代碼以下:
locationManager.requestLocationUpdates(provider, 2000, 10,locationListener);// 產生位置改變事件的條件設定爲距離改變10米,時間間隔爲2秒,設定監聽位置變化
接下來介紹上面這行代碼的各個參數,第一個參數是咱們以前指定LocationManager的定位方法,GPS定位或網絡定位,第二個參數指的是產生位置改變事件的時間間隔,單位爲微秒,第三個參數指的是距離條件,單位爲米,第四個參數是回調函數,用於處理位置改變事件,即設置LocationListener監聽器。總的來講,那一行代碼將產生位置改變事件的條件設定爲距離改變10米,時間間隔爲2秒。
(5).實現locationListener的代碼以下:
private final LocationListener locationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { // TODO Auto-generated method stub } @Override public void onProviderDisabled(String arg0) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String arg0) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String arg0, int arg1, Bundle arg2) { // TODO Auto-generated method stub } };
接下來對上面實現LocationListener的代碼下的四個方法進行簡單介紹:
onLocationChanged()這個方法在位置改變時被調用,onProviderDisabled()這個方法在用戶禁用具備定位功能的硬件時被調用,onProviderEnabled()這個方法在用戶啓用具備定位功能的硬件時被調用,onStatusChanged()這個方法在定位功能硬件狀態改變時被調用,例如,從不可獲取位置信息狀態到能夠獲取位置信息的狀態,反之亦然 。
(6).爲了使GPS定位功能生效,還須要在AndroidManifest.xml文件中加入用戶許可,即加入下面這行代碼,加入用戶權限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>