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 }