開發過程中,遇到這樣一個需求,指定起始和終點站,然後從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附上!