定位到我的位置


 

在實現定位到我的位置時,首先要開啟定位圖層,可以使用com.baidu.mapapi.map.BaiduMap 對象的setMyLocationEnabled()方法實現。該方法的語法格式如下:

Public final void set MyLocationEnabled(boolean enabled)

其中,enabled參數用於指定是否允許定位圖層,值為true時表示允許,否則為不允許。

開啟定位圖層的代碼如下:

mBaiduMap.setMyLocationEnabled(true); 

然后創建MyLocationData對象,用於構造定位數據,包括GPS定位時方向角度、緯度坐標、經度坐標、定位精度和時速等。例如,構造定位數據,指定GPS定位時方向角度為100、坐標位置為當前位置,可以使用下面的代碼。

01     MyLocationData locData = new MyLocationData.Builder(). 02             accuracy(location.getAccuracy())    //設置精度
03             .direction(100)                     //此處設置開發者獲取到的方向信息,順時針0-360
04             .latitude(location.getLatitude())   //設置緯度坐標
05             .longitude(location.getLongitude()) //設置經度坐標
06             .build();

說明:此處代碼將使用Android原有定位方法。

再設置定位數據,並配置定位圖層的一些信息。代碼如下:

01 mBaiduMap.setMyLocationData(locData); 02     //設置自定義定位圖標
03     BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory 04 .fromResource(R.drawable.icon_geo); 05     mCurrentMode = MyLocationConfiguration.LocationMode.NORMAL;      //設置定位模式
06     //位置構造方式,將定位模式,定義圖標添加其中
07     MyLocationConfiguration config = new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker); 08     mBaiduMap.setMyLocationConfigeration(config);                 //地圖顯示定位圖標

最后,在不需要定位圖層時關閉定位圖層。代碼如下:

mBaiduMap.setMyLocationEnabled(false);                                 //關閉定位圖層

下面通過一個實例來演示如何在百度地圖上定位我的位置。

 

實例 百度地圖定位我的位置

 

說明:該實例在本章實例06基礎上進行修改。

在Android Studio中創建Module,名稱為“My Location”。在該Module中實現本實例,具體步驟如下。

(1)打開主活動MainActivity,在該文件中聲明所需成員變量,關鍵代碼如下:

01     private MapView mMapView;                                   //百度地圖組件
02     private BaiduMap mBaiduMap;                                 //定義百度地圖對象
03     private boolean isFirstLoc = true;                          //定義第一次啟動
04     private MyLocationConfiguration.LocationMode mCurrentMode;  //定義當前定位模式

(2)在MainActivity的onCreate()方法中,獲取系統的LocationManager對象,關鍵代碼如下:

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

(3)在onCreate()方法中,通過locationManager.requestLocationUpdates()方法與位置監聽器來設置每秒獲取一次location信息,並將最新的定位信息傳遞給創建的locationUpdates()方法中。關鍵代碼如下:

01   //設置每秒獲取一次location信息

02 locationManager.requestLocationUpdates( 03           LocationManager.GPS_PROVIDER,      //GPS定位提供者

04           1000,                              //更新數據時間為1秒

05           1,                                 //位置間隔為1米

06           //位置監聽器

07           new LocationListener() {           //GPS定位信息發生改變時觸發,用於更新位置信息

08 @Override 09               public void onLocationChanged(Location location) { 10                   //GPS信息發生改變時,更新位置

11 locationUpdates(location); 12 } 13 @Override 14               //位置狀態發生改變時觸發

15               public void onStatusChanged(String provider, int status, Bundle extras) { 16 } 17 @Override 18               //定位提供者啟動時觸發

19               public void onProviderEnabled(String provider) { 20 } 21 @Override 22               //定位提供者關閉時觸發

23               public void onProviderDisabled(String provider) { 24 } 25 }); 26   //從GPS獲取最新的定位信息

27   Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 28   locationUpdates(location);        //將最新的定位信息傳遞給創建的locationUpdates()方法中

說明:添加上的代碼后,在代碼的下方將出現紅色浪線,此時按下〈Alt+Enter〉鍵,然后選擇Add Permission ACCESS_FINE_LOCATION選項,添加該權限解決紅色浪線問題。此時,Android Studio將自動添加以下權限檢查的代碼。

01   if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 02       return; 03   }

(4)在MainActivity中,創建locationUpdates()方法,用於獲取當前的經緯度,並設置定位。當獲取的信息不為空時,首先設置第一次定位的中心點為當前位置,然后構造和設置定位數據,最后在地圖上顯示定位圖標。關鍵代碼如下:

01   public void locationUpdates(Location location) {                      //獲取指定的查詢信息

02       //如果location不為空時

03       if (location != null) { 04           //獲取用戶當前經緯度

05           LatLng ll = new LatLng(location.getLatitude(), location.getLongitude()); 06          Log.i("Location","緯度:"+location.getLatitude()+" | 經度:"+location.getLongitude()); 07           if (isFirstLoc) {  //如果是第一次定位,就定位到以自己為中心

08               MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);  //更新坐標位置

09               mBaiduMap.animateMapStatus(u);                             //設置地圖位置

10               isFirstLoc = false;                                        //取消第一次定位

11 } 12           //構造定位數據

13           MyLocationData locData = new MyLocationData.Builder(). 14                   accuracy(location.getAccuracy())                       //設置精度

15                   .direction(100)        // 此處設置開發者獲取到的方向信息,順時針0~360

16                   .latitude(location.getLatitude())                      //設置緯度坐標

17                   .longitude(location.getLongitude())                    //設置經度坐標

18 .build(); 19           //設置定位數據

20 mBaiduMap.setMyLocationData(locData); 21           //設置自定義定位圖標

22           BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory 23 .fromResource(R.drawable.icon_geo); 24           mCurrentMode = MyLocationConfiguration.LocationMode.NORMAL;    //設置定位模式

25           //位置構造方式,將定位模式,定義圖標添加其中

26           MyLocationConfiguration config = new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker); 27           mBaiduMap.setMyLocationConfigeration(config);                  //地圖顯示定位圖標

28       } else { 29           //否則輸出空信息

30           Log.i("Location","沒有獲取到GPS信息"); 31 } 32   }

 

(5)重寫Activity的onStart()方法和onStop()方法,在onStart()方法中啟動地圖定位,在onStop()方法中停止地圖定位。關鍵代碼如下:

01 @Override 02   protected void onStart() {                 //啟動地圖定位

03       super.onStart(); 04       mBaiduMap.setMyLocationEnabled(true);  //啟動定位圖層

05 } 06 @Override 07   protected void onStop() {                   //停止地圖定位

08       super.onStop(); 09       mBaiduMap.setMyLocationEnabled(false);  //關閉定位圖層

10   }

 

(6)在AndroidManifest.xml文件中,添加以下代碼設置訪問LocationProvider的相關權限,具體代碼如下:

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

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

 

(7)在工具欄中找到下拉列表框,選擇要運行的應用(這里為My Location),再單擊右側的按鈕,運行效果如圖14.24所示。

 

圖14.24  在百度地圖上顯示我的位置

說明:運行本實例需要在手機中進入 “設置”→“應用”→你的App應用名稱→“權限”開啟位置權限,即可進行定位。

 

本文摘自明日科技出版的《零基礎學Android》,轉載請注明出處!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM