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附上!

資源下載

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章