1. 程式人生 > >百度導航5.0之後的坑

百度導航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包的,全部合併在一起了,導致新舊版本合併時會出現很多衝突。

在百度地圖官網下載了百度導航的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,該引數值可以百度地圖控制檯拿到 在這裡插入圖片描述