fengyeezju 2020-04-20
运行效果图(注意运行前要先到设置里允许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:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mingrisoft.test"> //获取设备网络状态,禁用后无法获取网络状态 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> //网络权限,当禁用后,无法进行检索等相关业务 <uses-permission android:name="android.permission.INTERNET" /> //读取设备硬件信息,统计数据 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> //读取系统信息,包含系统版本等信息,用作统计 <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> //获取设备的网络状态,鉴权所需网络代理 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> //允许sd卡写权限,需写入地图数据,禁用后无法显示地图 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> //允许sd卡读权限,需读取地图数据,禁用后无法显示地图 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> //获取统计数据 <uses-permission android:name="android.permission.WRITE_SETTINGS" /> //鉴权所需该权限获取进程列表 <uses-permission android:name="android.permission.GET_TASKS" /> //使用步行AR导航,配置Camera权限 <uses-permission android:name="android.permission.CAMERA" /> //网络定位 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> //GPS定位 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="gEnaDhNCFNRRCKmc7XPM1PttGalSkeKr"/> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <com.baidu.mapapi.map.MapView android:id="@+id/bmapview" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" /> </RelativeLayout>
MainActivity:
package com.mingrisoft.test; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.MapStatusUpdate; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MyLocationConfiguration; import com.baidu.mapapi.map.MyLocationData; import com.baidu.mapapi.model.LatLng; public class MainActivity extends AppCompatActivity { private MapView mMapView; // 定义百度地图组件 private BaiduMap mBaiduMap; // 定义百度地图对象 private LocationClient mLocationClient; //定义LocationClient private BDLocationListener myListener = new MyLocationListener(); //定义位置监听 private boolean isFirstLoc = true; //定义第一次启动 private MyLocationConfiguration.LocationMode mCurrentMode; //定义当前定位模式 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext()); //初始化地图SDK setContentView(R.layout.activity_main); mMapView = (MapView) findViewById(R.id.bmapview); //获取地图组件 mBaiduMap = mMapView.getMap(); //获取百度地图对象 mLocationClient = new LocationClient(getApplicationContext()); //创建LocationClient类 mLocationClient.registerLocationListener(myListener); //注册监听函数 initLocation(); //调用initLocation()方法,实现初始化定位 } private void initLocation() { //该方法实现初始化定位 //创建LocationClientOption对象,用于设置定位方式 LocationClientOption option = new LocationClientOption(); option.setCoorType("bd09ll"); //设置坐标类型 option.setScanSpan(1000); //1秒定位一次 option.setOpenGps(true); //打开GPS mLocationClient.setLocOption(option); //保存定位参数与信息 mCurrentMode = MyLocationConfiguration.LocationMode.NORMAL; //设置定位模式 //设置自定义定位图标 BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory .fromResource(R.drawable.icon_geo); //位置构造方式,将定位模式,定义图标添加其中 MyLocationConfiguration config = new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker); mBaiduMap.setMyLocationConfigeration(config); //地图显示定位图标 } public class MyLocationListener implements BDLocationListener { //设置定位监听器 @Override public void onReceiveLocation(BDLocation location) { //销毁后不再处理新接收的位置 if (location == null || mMapView == null) return; // 构造定位数据 MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius()) // 此处设置开发者获取到的方向信息,顺时针0-360 .direction(100) .latitude(location.getLatitude()) .longitude(location.getLongitude()) .build(); // 设置定位数据 mBaiduMap.setMyLocationData(locData); if (isFirstLoc) { //如果是第一次定位,就定位到以自己为中心 LatLng ll = new LatLng(location.getLatitude(), location.getLongitude()); //获取用户当前经纬度 MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll); //更新坐标位置 mBaiduMap.animateMapStatus(u); //设置地图位置 isFirstLoc = false; //取消第一次定位 } } } @Override protected void onStart() { //地图定位与Activity生命周期绑定 super.onStart(); mBaiduMap.setMyLocationEnabled(true); mLocationClient.start(); } @Override protected void onStop() { //停止地图定位 super.onStop(); mBaiduMap.setMyLocationEnabled(false); mLocationClient.stop(); } @Override protected void onResume() { super.onResume(); mMapView.onResume(); } @Override protected void onPause() { super.onPause(); mMapView.onPause(); } @Override protected void onDestroy() { //销毁地图 mMapView.onDestroy(); mMapView = null; super.onDestroy(); } }
id=3&hmsr=%E5%BC%80%E5%8F%91%E8%80%85-AI%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF&hmpl=&hmcu=&hmkw=&hmci=