android百度地图定位服务
Posted hemeiwolong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android百度地图定位服务相关的知识,希望对你有一定的参考价值。
运行效果图(注意运行前要先到设置里允许GPS权限,否则无法定位,只显示百度地图):
首先去注册appkey,下载SDK开发包:
创建一个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文件夹中剩下的文件复制到此。
用于显示定位的图标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:
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 }
以上是关于android百度地图定位服务的主要内容,如果未能解决你的问题,请参考以下文章