android百度地圖定位服務

運行效果圖(注意運行前要先到設置裏容許GPS權限,不然沒法定位,只顯示百度地圖):android

 

首先去註冊appkey,下載SDK開發包:git

 

 

建立一個Module包名爲com.mingrisoft,將項目結構類型切換爲Project,解壓縮下載的BaiduLBS_Android-SDK_Lib.zip文件,將libs下的jar文件複製到該Module的libs文件夾中。選中這些文件,單擊右鍵選擇Add As Library...,添加百度類庫。在「src/main」中新建目錄JNIlibs,並將解壓縮的BaiduLBS_Android-SDK_Lib.zip文件libs文件夾中剩下的文件複製到此。api

        用於顯示定位的圖標icon_geo.png:網絡

 

 

manifests:
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.mingrisoft.test">
 4 
 5     //獲取設備網絡狀態,禁用後沒法獲取網絡狀態
 6     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 7     //網絡權限,當禁用後,沒法進行檢索等相關業務
 8     <uses-permission android:name="android.permission.INTERNET" />
 9     //讀取設備硬件信息,統計數據
10     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
11     //讀取系統信息,包含系統版本等信息,用做統計
12     <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
13     //獲取設備的網絡狀態,鑑權所需網絡代理
14     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
15     //容許sd卡寫權限,需寫入地圖數據,禁用後沒法顯示地圖
16     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
17     //容許sd卡讀權限,需讀取地圖數據,禁用後沒法顯示地圖
18     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
19     //獲取統計數據
20     <uses-permission android:name="android.permission.WRITE_SETTINGS" />
21     //鑑權所需該權限獲取進程列表
22     <uses-permission android:name="android.permission.GET_TASKS" />
23     //使用步行AR導航,配置Camera權限
24     <uses-permission android:name="android.permission.CAMERA" />
25     //網絡定位
26     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
27     //GPS定位
28     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
29     <!-- 這個權限用於獲取wifi的獲取權限,wifi信息會用來進行網絡定位-->
30     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
31 
32     <application
33         android:allowBackup="true"
34         android:icon="@mipmap/ic_launcher"
35         android:label="@string/app_name"
36         android:roundIcon="@mipmap/ic_launcher_round"
37         android:supportsRtl="true"
38         android:theme="@style/AppTheme">
39         <meta-data
40             android:name="com.baidu.lbsapi.API_KEY"
41             android:value="gEnaDhNCFNRRCKmc7XPM1PttGalSkeKr"/>
42 
43         <activity android:name=".MainActivity">
44             <intent-filter>
45                 <action android:name="android.intent.action.MAIN" />
46 
47                 <category android:name="android.intent.category.LAUNCHER" />
48             </intent-filter>
49         </activity>
50     </application>
51 
52 </manifest>

 

activity_main.xml:app

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:app="http://schemas.android.com/apk/res-auto"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:layout_width="match_parent"
 6     android:layout_height="match_parent"
 7     tools:context=".MainActivity">
 8 
 9     <com.baidu.mapapi.map.MapView
10         android:id="@+id/bmapview"
11         android:layout_width="match_parent"
12         android:layout_height="match_parent"
13         android:clickable="true" />
14 
15 </RelativeLayout>

 

MainActivity:
  1 package com.mingrisoft.test;
  2 
  3 import android.os.Bundle;
  4 import android.support.v7.app.AppCompatActivity;
  5 
  6 import com.baidu.location.BDLocation;
  7 import com.baidu.location.BDLocationListener;
  8 import com.baidu.location.LocationClient;
  9 import com.baidu.location.LocationClientOption;
 10 import com.baidu.mapapi.SDKInitializer;
 11 import com.baidu.mapapi.map.BaiduMap;
 12 import com.baidu.mapapi.map.BitmapDescriptor;
 13 import com.baidu.mapapi.map.BitmapDescriptorFactory;
 14 import com.baidu.mapapi.map.MapStatusUpdate;
 15 import com.baidu.mapapi.map.MapStatusUpdateFactory;
 16 import com.baidu.mapapi.map.MapView;
 17 import com.baidu.mapapi.map.MyLocationConfiguration;
 18 import com.baidu.mapapi.map.MyLocationData;
 19 import com.baidu.mapapi.model.LatLng;
 20 
 21 public class MainActivity extends AppCompatActivity {
 22 
 23     private MapView mMapView;     // 定義百度地圖組件
 24     private BaiduMap mBaiduMap;   // 定義百度地圖對象
 25     private LocationClient mLocationClient;  //定義LocationClient
 26     private BDLocationListener myListener = new MyLocationListener();  //定義位置監聽
 27     private boolean isFirstLoc = true;  //定義第一次啓動
 28     private MyLocationConfiguration.LocationMode mCurrentMode;  //定義當前定位模式
 29 
 30     @Override
 31     protected void onCreate(Bundle savedInstanceState) {
 32         super.onCreate(savedInstanceState);
 33         SDKInitializer.initialize(getApplicationContext());   //初始化地圖SDK
 34         setContentView(R.layout.activity_main);
 35         mMapView = (MapView) findViewById(R.id.bmapview);  //獲取地圖組件
 36         mBaiduMap = mMapView.getMap();  //獲取百度地圖對象
 37         mLocationClient = new LocationClient(getApplicationContext());  //建立LocationClient類
 38         mLocationClient.registerLocationListener(myListener);   //註冊監聽函數
 39         initLocation();  //調用initLocation()方法,實現初始化定位
 40     }
 41 
 42     private void initLocation() {  //該方法實現初始化定位
 43         //建立LocationClientOption對象,用於設置定位方式
 44         LocationClientOption option = new LocationClientOption();
 45         option.setCoorType("bd09ll");  //設置座標類型
 46         option.setScanSpan(1000);      //1秒定位一次
 47         option.setOpenGps(true);      //打開GPS
 48         mLocationClient.setLocOption(option);  //保存定位參數與信息
 49         mCurrentMode = MyLocationConfiguration.LocationMode.NORMAL;  //設置定位模式
 50         //設置自定義定位圖標
 51         BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory
 52                 .fromResource(R.drawable.icon_geo);
 53         //位置構造方式,將定位模式,定義圖標添加其中
 54         MyLocationConfiguration config = new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker);
 55         mBaiduMap.setMyLocationConfigeration(config);  //地圖顯示定位圖標
 56     }
 57 
 58     public class MyLocationListener implements BDLocationListener {  //設置定位監聽器
 59         @Override
 60         public void onReceiveLocation(BDLocation location) {
 61             //銷燬後再也不處理新接收的位置
 62             if (location == null || mMapView == null)
 63                 return;
 64             // 構造定位數據
 65             MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())
 66                     // 此處設置開發者獲取到的方向信息,順時針0-360
 67                     .direction(100)
 68                     .latitude(location.getLatitude())
 69                     .longitude(location.getLongitude())
 70                     .build();
 71             // 設置定位數據
 72             mBaiduMap.setMyLocationData(locData);
 73 
 74             if (isFirstLoc) {  //若是是第一次定位,就定位到以本身爲中心
 75                 LatLng ll = new LatLng(location.getLatitude(), location.getLongitude()); //獲取用戶當前經緯度
 76                 MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);  //更新座標位置
 77                 mBaiduMap.animateMapStatus(u);                            //設置地圖位置
 78                 isFirstLoc = false;                                      //取消第一次定位
 79             }
 80 
 81         }
 82     }
 83 
 84 
 85     @Override
 86     protected void onStart() {  //地圖定位與Activity生命週期綁定
 87         super.onStart();
 88         mBaiduMap.setMyLocationEnabled(true);
 89         mLocationClient.start();
 90     }
 91 
 92 
 93     @Override
 94     protected void onStop() {  //中止地圖定位
 95         super.onStop();
 96         mBaiduMap.setMyLocationEnabled(false);
 97         mLocationClient.stop();
 98     }
 99 
100     @Override
101     protected void onResume() {
102         super.onResume();
103         mMapView.onResume();
104     }
105 
106     @Override
107     protected void onPause() {
108         super.onPause();
109         mMapView.onPause();
110     }
111 
112 
113     @Override
114     protected void onDestroy() {  //銷燬地圖
115         mMapView.onDestroy();
116         mMapView = null;
117         super.onDestroy();
118     }
119 
120 
121 }
相關文章
相關標籤/搜索