百度地圖Android SDK使用及注意事項

前言

本文不會過度介紹百度地圖SDK的Api使用发框,更多地介紹遇到的一些問題與注意事項菇怀。

一餐胀、百度地圖SDK相關資源

第一步必然是注冊登錄賬號(只要有百度賬號就OK)棚蓄,獲取百度地圖SDK及文檔靶累,地址如下:
[百度地圖開放平臺][1],文檔及SDK資源都在這里啦癣疟。
[1]: http://lbsyun.baidu.com/
下載頁面如下:

百度地圖SDK下載頁面

建議按照所需功能下載相應的SDK挣柬,以免出現(xiàn)缺包及沖突的現(xiàn)象發(fā)生。

二睛挚、創(chuàng)建應用

這一步很關鍵邪蛔,因為涉及到獲取Appkey和設置密鑰。如果沒有配置好應用扎狱,地圖是無法成功加載的侧到。

1.進入官網-控制臺-點擊“創(chuàng)建應用”

頁面如下:


創(chuàng)建應用

接著填寫應用名稱,選擇應用類型淤击,然后選擇啟用服務(默認全選匠抗,如果不確定的話,就全選吧)污抬。

2.配置包名及SHA1值

當我們選擇應用類型為Android SDK汞贸,會出現(xiàn)如下頁面:

這里寫圖片描述

我們發(fā)現(xiàn)需要填寫發(fā)布版SHA1,開發(fā)版SHA1及包名印机,包名好解決(就是我們app的包名矢腻,從項目的清單文件里就能找到),但是這兩個SHA1 是什么呢射赛?點擊“查看詳細配置方法”多柑,我們一探究竟。
打開頁面之后你會發(fā)現(xiàn)楣责,百度關于如何獲取SHA1已經介紹的很清楚了竣灌。主要采取第一種方法,通過命令行秆麸,使用keytool獲取 ** 初嘹,定位到.adnroid目錄,輸入keytool -list -v -keystore debug.keystore蛔屹,這時需要輸入密鑰口令(密鑰口令默認是android)削樊,會得到三種指紋證書,選取SHA1類型的證書,復制填入到開發(fā)版的SHA1漫贞。
獲取開發(fā)版的方法與其類似甸箱,只需要定位到項目的簽名文件目錄,在命令行輸入keytool -list -v -keystore 簽名文件名 輸入創(chuàng)建簽名文件時設置的密鑰口令迅脐,就能獲取到此簽名的SHA1芍殖,然后填入發(fā)布版SHA1即可,得到SHA1界面如下:
獲取SHA1

點擊提交之后谴蔑,我們就可看到控制臺里就有我們剛剛創(chuàng)建的應用(這時就能看到appkey豌骏,簡稱
AK),注意AK**值隐锭,之后將會用到窃躲。

三、百度地圖SDK

當我們完成以上配置之后钦睡,接下來就進入到喜聞樂見的導包環(huán)節(jié)蒂窒。這個環(huán)節(jié)基本無坑,只有幾點需要注意荞怒。

1.關于so文件與BaiduLBS_Android.jar

第一步獲取資源時洒琢,我們根據選擇所需功能獲得了百度地圖SDK的so文件與jar包,需要注意BaiduLBS_Android.jar這個jar包會包含你選擇的功能所有代碼(比如你選擇了導航褐桌,那么導航的代碼也包含在這里)衰抑,不需要像demo(有的版本的Demo是會分包的)中那樣集成,避免出現(xiàn)沖突荧嵌。
加入so文件的時候注意呛踊,應該與你項目中的支持so庫類型一致,比如項目中只有armeabi與armeabi-v7a文件夾完丽,那么就將百度地圖SDK對應的so加入恋技,不需要添加其他類型(如x86等)。如果需要適配所有CPU架構的機器逻族,不得已群全部導入的情況下,就要檢查項目中已使用的其他SDK的so是否支持所有的平臺骄崩,適當地做出取舍聘鳞。簡而言之,各種CPU架構下的文件夾的so應該保持對應一致(不要在armeabi有a.so要拂,而x86下卻沒有抠璃,這種情況我們只保留armeabi就可以了)。這一點在我們使用其他第三方SDK時脱惰,也是適用的搏嗡。

2.項目配置

導入相關文件之后,需要在項目中做出相應配置,就能正常使用百度地圖SDK了采盒。這里注意幾點:

1旧乞、 在application中添加開發(fā)密鑰

<application>  
    <meta-data  
        android:name="com.baidu.lbsapi.API_KEY"  
        android:value="開發(fā)者 key" />  
</application>

這個值在創(chuàng)建應用之后就能獲得,千萬不能出現(xiàn)錯誤磅氨。

2尺栖、Android Studio默認放so文件的目錄是src\main\jniLibs目錄,這個目錄需要自己建烦租,如果沒有建立也可以放在libs中延赌,只不過需要在app.gradle做如下配置:

sourceSets{
  main{
       jniLibs.srcDir 'libs'  
       //說明so的路徑為該libs路徑,關聯(lián)所有地圖SDK的so文件
      }
}

3叉橱、提前配置混淆文件(怕后面忘記)挫以,混淆方法如下:

-keep class com.baidu.** {*;}
-keep class vi.com.** {*;}    
-dontwarn com.baidu.**

3.正式使用中的問題

使用SDK地圖時,只要按照文檔中編寫窃祝,基本問題都可以解決掐松。這里記錄以下使用中遇到的問題,不定期更新锌杀。

1.如何刪除指定的單一或者幾個Marker

按照文檔所述个绍,我們可以輕松地在地圖中添加Marker纹份,但是當我想要刪除某個Marker時,翻閱文檔只找到這個方法

mBaiduMap.clear();
//清除地圖上所有覆蓋物,無法分成批刪除 
尼克揚

真的無法成批刪除嗎加矛?當我查看添加Marker代碼時,有了新的發(fā)現(xiàn)欠啤。添加Marker方法如下:

//定義Maker坐標點  

LatLng point = new LatLng(39.963175, 116.400244);  

//構建Marker圖標  

BitmapDescriptor bitmap = BitmapDescriptorFactory  
    .fromResource(R.drawable.icon_marka);  

//構建MarkerOption哗咆,用于在地圖上添加Marker  

OverlayOptions option = new MarkerOptions()  
    .position(point)  
    .icon(bitmap);  

//在地圖上添加Marker,并顯示  

mBaiduMap.addOverlay(option);

我發(fā)現(xiàn)mBaiduMap.addOverlay(option) 這個方法會返回一個Overlay的對象猾担,而且Overlay類中有一個remove()方法袭灯,那么我們就可以實現(xiàn)刪除指定marker的功能了,代碼如下:

//在地圖上添加Marker绑嘹,并顯示稽荧,得到返回的overlay對象
Overlay overlay = mBaiduMap.addOverlay(ooA);

//當需要刪除這個marker時
overlay.remove();

四、百度定位SDK

1.項目配置

基本按照文檔上走不會有問題工腋,只需要注意不要漏掉

<service 
android:name="com.baidu.location.f" 
android:enabled="true" android:process=":remote"> 
</service>

這個服務以及相關權限姨丈。

2.正式使用中的問題

1.Android6.0的動態(tài)權限申請

百度定位SDK需要的權限中,有部分在Android6.0以上的系統(tǒng)中需要動態(tài)申請:

在Android 6.0系統(tǒng)中擅腰,需要動態(tài)獲取的權限涉及到:

1. 獲取手機狀態(tài):

Manifest.permission.READ_PHONE_STATE;

2. 獲取位置信息:

Manifest.permission.ACCESS_COARSE_LOCATION;
Manifest.permission.ACCESS_FINE_LOCATION;

3. 讀寫SD卡:

Manifest.permission.READ_EXTERNAL_STORAGE;
Manifest.permission.WRITE_EXTERNAL_STORAGE;

因此我們應該在申請到這些權限之后在做相關的處理蟋恬。

2.BDLocation.getAddrStr()有時返回null

百度定位SDK,BDLocationListener的onReceiveLocation(BDLocation location)這個回調函數會將定位的相關信息放在BDLocation location中趁冈。但是使用過程中發(fā)現(xiàn)歼争,調用location.getAddrStr()獲取定位點地址時拜马,返回為null,但是定位地點的經緯度是有的沐绒。同事教我使用經緯度獲取地址(但是會有一定誤差俩莽,勉強能用),方法如下:

//定位點
BDLocation lastLocation洒沦;
GeoCoder geoCoder = GeoCoder.newInstance();
            //
            final OnGetGeoCoderResultListener listener = new OnGetGeoCoderResultListener() {
                // 反地理編碼查詢結果回調函數
                @Override
                public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {
                    if (result == null
                            || result.error != com.baidu.mapapi.search.core.SearchResult.ERRORNO.NO_ERROR) {
                        // 沒有檢測到結果
                        return;
                    }
                    List<PoiInfo> poiInfos = result.getPoiList();

                    if (poiInfos != null && poiInfos.size() > 0){
                    //通常取第一條即可
                        PoiInfo info = poiInfos.get(0);
                        TLog.error("Address", info.address);
                    }else {
                        //沒檢索到結果
                    }

                }

                // 地理編碼查詢結果回調函數
                @Override
                public void onGetGeoCodeResult(GeoCodeResult result) {
                    if (result == null
                            || result.error != com.baidu.mapapi.search.core.SearchResult.ERRORNO.NO_ERROR) {
                        // 沒有檢測到結果
                    }
                }
            };
            // 設置地理編碼檢索監(jiān)聽者
            geoCoder.setOnGetGeoCodeResultListener(listener);
            //
            geoCoder.reverseGeoCode(new ReverseGeoCodeOption()
                    .location(new LatLng(lastLocation.getLatitude(), lastLocation.getLongitude())));

這是獲取定位點地址的下策豹绪,一般來說回調函數onReceiveLocation(BDLocation location)中的location還是能正常取到值的。

五申眼、百度導航SDK

1.項目配置

1.只有armeabi的so

特別注意瞒津,百度導航SDK只提供了armeabi的so文件,而且里面還包括了百度語音功能所需的so括尸。

2.百度語音配置

因為百度導航包含了語音功能巷蚪,所以要在百度語音中創(chuàng)建應用(我測試時發(fā)現(xiàn)現(xiàn)在會默認在百度語音控制臺創(chuàng)建,不過沒有自動創(chuàng)建的話濒翻,手動創(chuàng)建也不是什么難事)屁柏,之后再代碼中設置百度語音的APPID(這個值在百度語音的控制臺中查看):

Bundle bundle = new Bundle();
// 必須設置APPID,否則會靜音 bundle.putString(BNCommonSettingParam.TTS_APP_ID, "9354030");
BNaviSettingManager.setNaviSdkParam(bundle);

2.正式使用的問題

1.缺少assets資源文件導致黑屏

這是使用百度導航SDK常見坑有送,有時經常忘記把下載的assets資源文件導入項目中淌喻,看似它們是png圖片,實際上它們是做了偽裝的資源文件雀摘,一定得導入裸删,不然導航頁面黑屏。


assets

就是它們阵赠,多少開發(fā)者落在它們手中涯塔。

2.Android6.0的動態(tài)權限申請

老生常談的問題了,如果沒解決好清蚀,也可能導致導航頁面黑屏匕荸。主要需要以下權限:

Manifest.permission.READ_PHONE_STATE;
Manifest.permission.ACCESS_FINE_LOCATION;
Manifest.permission.WRITE_EXTERNAL_STORAGE;

筆者曾經因為少了讀寫文件權限導致導航頁面黑屏,排查了一天bug枷邪。

3.算路失敗

key配置正確榛搔,百度導航引擎初始化成功,但是調用導航卻算路失敗东揣。
導航時算路失敗的原因有以下幾種:
(1)地理位置獲取失敗
(2)傳入的經緯度有誤(例如經緯度弄反药薯,經緯度標注的點在國外)
(3)定位服務未開啟
(4)傳入的節(jié)點距離太近
(5)節(jié)點輸入有誤(例如設置了某個節(jié)點為空)
(6)上次算路取消了,需要等一會才能進行下一次算路

4.在部分8.0機型上救斑,導航頁面右下角小圖變形問題

這個問題是當我將手機系統(tǒng)升級到8.0時發(fā)現(xiàn)的,具體情況如下圖:

異常圖片

我一時找不出原因真屯,只能再看百度的Demo有沒有問題脸候,用手機一運行Demo
,果不其然,同樣的問題出現(xiàn)了。沒辦法运沦,只能求助百度了泵额,好在最近百度地圖SDK上線了一個問題反饋的功能,之后得到官方的的回答携添,解決辦法是:替換assets里面兩個資源文件(以前我用的是3.3.1版本嫁盲,現(xiàn)在換成3.3.3)
沒錯,還是這兩個家伙:
百度導航資源文件

結語

本文主要總結最經使用百度地圖相關SDK遇到的一些問題烈掠,不定期更新羞秤。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市左敌,隨后出現(xiàn)的幾起案子瘾蛋,更是在濱河造成了極大的恐慌,老刑警劉巖矫限,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哺哼,死亡現(xiàn)場離奇詭異,居然都是意外死亡叼风,警方通過查閱死者的電腦和手機取董,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來无宿,“玉大人茵汰,你說我怎么就攤上這事⌒负兀” “怎么了经窖?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長梭灿。 經常有香客問我画侣,道長,這世上最難降的妖魔是什么堡妒? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任配乱,我火速辦了婚禮,結果婚禮上皮迟,老公的妹妹穿的比我還像新娘搬泥。我一直安慰自己,他們只是感情好伏尼,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布忿檩。 她就那樣靜靜地躺著,像睡著了一般爆阶。 火紅的嫁衣襯著肌膚如雪燥透。 梳的紋絲不亂的頭發(fā)上沙咏,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機與錄音班套,去河邊找鬼肢藐。 笑死,一個胖子當著我的面吹牛吱韭,可吹牛的內容都是我干的吆豹。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼理盆,長吁一口氣:“原來是場噩夢啊……” “哼痘煤!你這毒婦竟也來了?” 一聲冷哼從身側響起熏挎,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤速勇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后坎拐,有當地人在樹林里發(fā)現(xiàn)了一具尸體烦磁,經...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年哼勇,在試婚紗的時候發(fā)現(xiàn)自己被綠了都伪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡积担,死狀恐怖陨晶,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情帝璧,我是刑警寧澤先誉,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站的烁,受9級特大地震影響褐耳,放射性物質發(fā)生泄漏。R本人自食惡果不足惜渴庆,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一铃芦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧襟雷,春花似錦刃滓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至计呈,卻和暖如春老客,著一層夾襖步出監(jiān)牢的瞬間僚饭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工胧砰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人苇瓣。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓尉间,卻偏偏與公主長得像,于是被迫代替她去往敵國和親击罪。 傳聞我的和親對象是個殘疾皇子哲嘲,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內容