开发过程中,遇到这样一个需求,指定起始和终点站,然后从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附上!