百度導航5.0之後的坑

百度地圖新舊版本里有很多衝突,特別是定位和導航就會報許多令人摸不着頭腦的錯誤,比如下面這些常見的:

  • mapsdkvi.com.gdi.bgl.android.java.EnvDrawText,
  • Multiple dex files define Lcom/baidu/android/bbalbs/common/util/CommonParam,
  • dlopen failed: library “/data/data/com.example.gpstest1/lib/libgnustl_shared.so” not found,
  • dlopen failed: library /lib/libcrypto.so" not found

雖說百度功能很強大,但不得不吐槽一下真的坑,困擾了很久,最後找到了一片文章寫到了這些問題的解決方法,主要是百度地圖升級到5.0之後,把以前的包是很多個jar包的,全部合併在一起了,導致新舊版本合併時會出現很多衝突。

https://blog.csdn.net/qq_34115899/article/details/80541545
這篇文章寫得很詳細,能解決一切衝突問題,誠意推薦給大家。

在百度地圖官網下載了百度導航的demo包之後,基本就是裏面的代碼直接進行copy,但是這裏也需要注意幾個問題
1、導航算路失敗的問題。
百度提供的導航路線類型有四類
int GCJ02 = 0; 國際經緯度座標
int BD09_MC = 1; 國測局座標
int WGS84 = 2; 百度墨卡託座標
int BD09LL = 3; 百度經緯度座標
自己在開發中類型必須要選對才行,我個人認爲這裏設置不同的座標類型主要還是在於經緯度的算法不同,一般我們獲取經緯度信息採用的都是“bd09ll”百度經緯度,默認值gcj02,
因爲在基礎定位時,我們需要設置定位參數
在這裏插入圖片描述

在類LocationClientOption中,源碼就只有三種類型:“gcj02”、“bd09”、“bd09ll”

public void setCoorType(String var1) {
    var1 = var1.toLowerCase();
    if(var1.equals("gcj02") || var1.equals("bd09") || var1.equals("bd09ll")) {
        this.coorType = var1;
    }
}

所以在初始化方法 public BNRoutePlanNode(double longitude, double latitude, String name, String description, int coType)時,傳入的coType應該與獲取經緯度值的設置CoorType保持一致。
比如我在之前定位設置的bd09ll,所以在導航計算路線時,設置的參數:

BNRoutePlanNode sNode = new BNRoutePlanNode(116.30142, 40.05087, "百度大廈", "百度大廈", BNRoutePlanNode.CoordinateType.BD09LL);
        BNRoutePlanNode eNode = new BNRoutePlanNode(116.39750, 39.90882, "北京天安門", "北京天安門", BNRoutePlanNode.CoordinateType.BD09LL);

注意這裏的coType也可以設置爲GCJ02。

2、設置語音必須導入官方Demo的Module包Navitts。
在初始化語音時,如果使用內置TTS,需要傳入參數APPID,該參數值可以百度地圖控制檯拿到
在這裏插入圖片描述

demo地址:https://github.com/LeeVanie/MapDemo

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