Android开发丶调用百度地图进行导航
开发过程中,遇到这样一个需求,指定起始和终点站,然后从app内部调起百度地图进行导航,网上相关的方法很多,但是很多都不太好使,官方的文档记录也不是很详细,经过一番折腾踩了一些坑,总算是将其实现了,特此做下记录!
步骤如下:
1.首先是新建一个AndroidStudio项目,然后去百度地图开放者平台注册项目,获取到ak值。
2.在百度地图开放者平台下载sdk,注意,常用的唤醒百度地图来进行导航只需要下载以下即可,不用下载其它的诸如定位SDK之类。
3.下载sdk,解压,会看到如下目录。
4.我们把它们全部拷贝到project下的libs文件夹中。
5.在app的build.gradle中添加如下代码。
sourceSets { main{ jniLibs.srcDirs= ['libs'] } }
6.点击加载按钮。
7.此时会发现jar包已经依赖,并生成一个jniLibs文件夹。
8.项目新建一个Application文件,并在清单文件中声明。
/** * @author created by fantasychong * @date 2020-01-08 */ public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); SDKInitializer.initialize(this); //加载百度地图so文件 } }
<application android:name=".MyApplication" xxxxxxxxxxx>
9.在清单文件中配置权限。
<!-- 这个权限用于访问GPS定位 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- 获取访问手机振动器权限,用于导航过程中的震动提示 --> <uses-permission android:name="android.permission.VIBRATE"/>
10.在清单文件中设置百度地图AK码。
<!--百度地图ak码--> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="a6FHN6Kq8OzKI7aQC3aMUDaMoG7oc7kr" />
10.打开app目录下的proguard-rules.pro文件,添加如下混淆代码。
-keep class com.baidu.** {*;} -keep class mapsdkvi.com.** {*;} -dontwarn com.baidu.**
11.此时环境已经搭建完毕,我们回到MainActivity,配置视图xml文件,此处直观起见,放一个按钮就行了。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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"> <Button android:id="@+id/main_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="调用导航"/> </LinearLayout>
12.指定一下起始终点站的经纬度(这里可以根据项目实际需求)。
//起始点经纬度 116.35885,39.914714 double startLon= 116.35885; double startLat= 39.914714; //终点经纬度 117.162582,36.690705 double endLon= 117.162582; double endLat= 36.690705;
13.设置button的点击监听,如果尚未安装百度地图app则提示下载即可。
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { NaviParaOption para = new NaviParaOption(); para.startPoint(new LatLng(startLat, startLon)); para.startName("从这里开始"); para.endPoint(new LatLng(endLat, endLon)); para.endName("到这里结束"); try { BaiduMapNavigation.openBaiduMapNavi(para, MainActivity.this); } catch (BaiduMapAppNotSupportNaviException e) { e.printStackTrace(); Toast.makeText(MainActivity.this, "您尚未安装百度地图app", Toast.LENGTH_SHORT).show(); } } });
14.跑起来!
此处的机制是当手机尚未安装百度地图时,会自动跳转到网页版导航,不过个人觉得网页版不太方便,因此我们这里设置关掉网页支持,只toast提示即可!
回到button的点击监听,添加如下代码。
BaiduMapNavigation.setSupportWebNavi(false);
安装,运行!
15.当设备安装了百度地图时,点击开始导航
至此全部完成,demo附上!