Android獲取位置信息的方法
本文實(shí)例為大家分享了Android獲取位置信息的具體代碼,供大家參考,具體內(nèi)容如下
1.位置服務(wù)的簡(jiǎn)介:位置服務(wù),英文翻譯為L(zhǎng)ocation-Based Services,縮寫(xiě)為L(zhǎng)BS,又稱(chēng)為定位服務(wù)或基于位置的服務(wù),融合了GPS定位、移動(dòng)通信、導(dǎo)航等多種技術(shù),提供與空間位置相關(guān)的綜合應(yīng)用服務(wù),基于位置的服務(wù)發(fā)展很迅速,涉及商務(wù)、醫(yī)療、工作和生活的各個(gè)方面,為用戶(hù)提供定位、追蹤和敏感區(qū)域警告等一系列服務(wù)。比如谷歌地圖,百度地圖,都需要通過(guò)位置服務(wù)。
2.Android平臺(tái)下支持提供位置服務(wù)的API,在開(kāi)發(fā)過(guò)程中主要用到LocationManager和LocationProviders對(duì)象:
(1).LocationManager可以用來(lái)獲取當(dāng)前的位置,追蹤設(shè)備的移動(dòng)路線(xiàn),或設(shè)定敏感區(qū)域,在進(jìn)入或離開(kāi)敏感區(qū)域時(shí)設(shè)備會(huì)發(fā)出特定警報(bào) 。
(2).LocationProviders則是提供定位功能的組件集合,集合中的每種組件以不同的技術(shù)提供設(shè)備的當(dāng)前位置,區(qū)別在于定位的精度、速度和成本等方面 。
3.接下來(lái)將講述一個(gè)如何實(shí)現(xiàn)獲取位置的經(jīng)緯度,并且如果位置改變,如何通過(guò)位置的改變,經(jīng)緯度也發(fā)生變化的例子,這里以L(fǎng)ocationManager對(duì)象為例:
(1).首先,第一步,獲取LocationManager對(duì)象,可以通過(guò)調(diào)用android.app.Activity.getSystemService()函數(shù)獲取,代碼如下:
String serviceString = Context.LOCATION_SERVICE;// 獲取的是位置服務(wù) LocationManager locationManager = (LocationManager) getSystemService(serviceString);// 調(diào)用getSystemService()方法來(lái)獲取LocationManager對(duì)象
其中的LOCATION_SERVICE是Android支持的系統(tǒng)級(jí)服務(wù),控制位置等設(shè)備的更新。
(2).在獲取到LocationManager對(duì)象后,還需要指定LocationManager的定位方法 ,然后才能夠調(diào)用LocationManager.getLastKnowLocation()方法獲取當(dāng)前位置 ,目前LocationManager主要有兩種定位方法
GPS定位:可以提供更加精確的位置信息,但定位速度和質(zhì)量受到衛(wèi)星數(shù)量和環(huán)境情況的影響,需要android.permissions.ACCESS_FINE_LOCATION用戶(hù)權(quán)限。
網(wǎng)絡(luò)定位:提供的位置信息精度差,但速度較GPS定位要迅速 ,利用基站或WiFi訪(fǎng)問(wèn)的提供近似的位置信息,需要具有如下權(quán)限:android.permission.ACCESS_COARSE_LOCATION 或 android.permission.ACCESS_FINE_LOCATION。
注:(使用GPS定位和網(wǎng)絡(luò)定位的LocationManager類(lèi)的靜態(tài)常量不一樣,GPS定位的LocationManager類(lèi)的靜態(tài)常量為:GPS_PROVIDER,網(wǎng)絡(luò)定位的LocationManager類(lèi)的靜態(tài)常量為:NETWORK_PROVIDER,這兩個(gè)靜態(tài)常量在獲取當(dāng)前位置時(shí)要用到。)
下面以使用GPS定位為例,獲取位置信息代碼如下:
String provider = LocationManager.GPS_PROVIDER;// 指定LocationManager的定位方法 Location location = locationManager.getLastKnownLocation(provider);// 調(diào)用getLastKnownLocation()方法獲取當(dāng)前的位置信息
(3).通過(guò)調(diào)用Location中的getLatitude()和getLonggitude()方法可以分別獲取位置信息中的緯度和經(jīng)度,代碼如下:
double lat = location.getLatitude();//獲取緯度 double lng = location.getLongitude();//獲取經(jīng)度
(4).在很多提供定位服務(wù)的應(yīng)用程序中,不僅需要獲取當(dāng)前的位置信息,還需要監(jiān)視位置的變化,在位置改變時(shí)調(diào)用特定的處理方法 ,其中LocationManager提供了一種便捷、高效的位置監(jiān)視方法requestLocationUpdates(),可以根據(jù)位置的距離變化和時(shí)間間隔設(shè)定,產(chǎn)生位置改變事件的條件,這樣可以避免因微小的距離變化而產(chǎn)生大量的位置改變事件 ,LocationManager中設(shè)定監(jiān)聽(tīng)位置變化的代碼如下:
locationManager.requestLocationUpdates(provider, 2000, 10,locationListener); // 產(chǎn)生位置改變事件的條件設(shè)定為距離改變10米,時(shí)間間隔為2秒,設(shè)定監(jiān)聽(tīng)位置變化
接下來(lái)介紹上面這行代碼的各個(gè)參數(shù),第一個(gè)參數(shù)是我們之前指定LocationManager的定位方法,GPS定位或網(wǎng)絡(luò)定位,第二個(gè)參數(shù)指的是產(chǎn)生位置改變事件的時(shí)間間隔,單位為微秒,第三個(gè)參數(shù)指的是距離條件,單位為米,第四個(gè)參數(shù)是回調(diào)函數(shù),用于處理位置改變事件,即設(shè)置LocationListener監(jiān)聽(tīng)器??偟膩?lái)說(shuō),那一行代碼將產(chǎn)生位置改變事件的條件設(shè)定為距離改變10米,時(shí)間間隔為2秒。
(5).實(shí)現(xiàn)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 } };
接下來(lái)對(duì)上面實(shí)現(xiàn)LocationListener的代碼下的四個(gè)方法進(jìn)行簡(jiǎn)單介紹:
onLocationChanged()這個(gè)方法在位置改變時(shí)被調(diào)用,onProviderDisabled()這個(gè)方法在用戶(hù)禁用具有定位功能的硬件時(shí)被調(diào)用,onProviderEnabled()這個(gè)方法在用戶(hù)啟用具有定位功能的硬件時(shí)被調(diào)用,onStatusChanged()這個(gè)方法在定位功能硬件狀態(tài)改變時(shí)被調(diào)用,例如,從不可獲取位置信息狀態(tài)到可以獲取位置信息的狀態(tài),反之亦然 。
(6).為了使GPS定位功能生效,還需要在A(yíng)ndroidManifest.xml文件中加入用戶(hù)許可,即加入下面這行代碼,加入用戶(hù)權(quán)限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android 新手引導(dǎo)蒙層效果實(shí)現(xiàn)代碼示例
本篇文章主要介紹了Android 新手引導(dǎo)蒙層效果實(shí)現(xiàn)代碼示例,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01Android簡(jiǎn)單實(shí)用的可拖拽GridView組件分享
在我們?nèi)粘i_(kāi)發(fā)中,使用?GridView?這種網(wǎng)格視圖的場(chǎng)合還是不少的,本篇我們來(lái)介紹一個(gè)支持拖拽的?GridView?組件,可以輕松搞定網(wǎng)格視圖的拖拽排序,需要的可以參考一下2023-06-06Android編程實(shí)現(xiàn)獲取系統(tǒng)內(nèi)存、CPU使用率及狀態(tài)欄高度的方法示例
這篇文章主要介紹了Android編程實(shí)現(xiàn)獲取系統(tǒng)內(nèi)存、CPU使用率及狀態(tài)欄高度的方法,涉及Android基于自定義類(lèi)實(shí)現(xiàn)針對(duì)系統(tǒng)硬件信息的相關(guān)獲取操作技巧,需要的朋友可以參考下2017-08-08Android實(shí)現(xiàn)搜索功能并本地保存搜索歷史記錄
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)搜索功能,并實(shí)現(xiàn)本地保存搜索歷史記錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-03-03Android開(kāi)發(fā)之獲取LayoutInflater對(duì)象的方法總結(jié)
這篇文章主要介紹了Android開(kāi)發(fā)之獲取LayoutInflater對(duì)象的方法,結(jié)合實(shí)例形式總結(jié)分析了Android獲取LayoutInflater對(duì)象的常用技巧,需要的朋友可以參考下2016-02-02Android UI設(shè)計(jì)與開(kāi)發(fā)之PopupWindow仿騰訊新聞底部彈出菜單
這篇文章主要為大家詳細(xì)介紹了Android UI設(shè)計(jì)與開(kāi)發(fā)之PopupWindow仿騰訊新聞底部彈出菜單,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Android4.4新增函數(shù)訪(fǎng)問(wèn)外部存儲(chǔ)
這篇文章主要介紹了Android4.4新增函數(shù)訪(fǎng)問(wèn)外部存儲(chǔ)的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10