估計(jì)很多小伙伴們在開發(fā)的時(shí)候會(huì)用到定位和地圖功能,用的最多的應(yīng)該是百度地圖和高德地圖,這兩天我在使用百度地圖定位的時(shí)候碰到了許多迷之bug,簡直迷得不要不要的,把自己碰到的問題記下來,給自己一個(gè)記錄,也希望能給遇到同樣問題的朋友提供一點(diǎn)幫助。
一、以百度地圖定位流程為例
首先推薦:百度開發(fā)者官網(wǎng):Android定位SDK
過來人建議:強(qiáng)烈建議仔細(xì)研讀百度地圖官網(wǎng)的開發(fā)文檔說明!
說明:Android開發(fā),開發(fā)工具為AndroidStudio
(一):申請百度賬號(hào),登錄并在開發(fā)平臺(tái)創(chuàng)建一個(gè)應(yīng)用,拿到AK;
(二):申請密鑰,可以參照官網(wǎng)的步驟,也可以參照郭霖大神在《第一行代碼》中步驟來(如果不知道的可以百度或者留言);
(三):配置環(huán)境,這是流程中最關(guān)鍵的一步,許多人問題就出在這里。詳細(xì)步驟參考官網(wǎng)步驟.下載庫文件時(shí)你可以下載總的文件,也可以根據(jù)自己的需要下載自己需要的部分,有定位、導(dǎo)航、全景等等。
下載后你會(huì)得到一個(gè)壓縮文件,解壓后可以看到有以下文件:
官網(wǎng)說的是將SO文件放到自己APP的對應(yīng)架構(gòu)下的文件夾中,即將前面有紅箭頭的五個(gè)文件夾都放入到jnilibs文件夾下,其中jnilibs是自己新建的文件夾,其位置如下(project模式下的):
然后將剩下的一個(gè).jar文件放入
libs文件夾下,再在build.gradle中(一般放buildTypes下面)使用以下代碼配置SO文件的使用,
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
然后再配置 service,聲明權(quán)限,設(shè)置AcessKey,這些照著百度地圖開發(fā)者官網(wǎng)的開發(fā)手冊來就是了。運(yùn)氣很好的話 Sync project然后跑一遍程序就能定到位了。但是今天這篇文章的重點(diǎn)不在這,而是在下面的報(bào)錯(cuò)!對,沒錯(cuò),就是報(bào)錯(cuò)!
二、可能遇到的報(bào)錯(cuò)
說明:以下碰到的報(bào)錯(cuò)都是建立在你的代碼正確的基礎(chǔ)之上,而非指你的代碼邏輯或者語法不對而導(dǎo)致的錯(cuò)誤
(一)SO文件加載失敗, 這是報(bào)錯(cuò)問題中最最常見的報(bào)錯(cuò)
原因:導(dǎo)進(jìn)去的.so文件沒有加載進(jìn)去。怎么看才能知道是這個(gè)原因呢?如果你把官網(wǎng)的代碼都寫上去了的話,你在 AndroidStudio下面的logcat區(qū)域會(huì)遇到
error code : 162 latitude : 4.9E-324 lontitude : 4.9E-324
這樣的報(bào)錯(cuò)代碼,通過查詢官網(wǎng)的錯(cuò)誤碼得知162就是.so文件加載失敗,網(wǎng)上解決方式也是眾說紛紜,前段時(shí)間開發(fā)和現(xiàn)在一樣的代碼現(xiàn)在定位卻出了問題,同一款app不同機(jī)型一個(gè)報(bào)錯(cuò)一個(gè)卻正常,吐槽某度的一大片······
解決方法: 像碰到這種情況還是回頭檢查自己有沒有嚴(yán)格按照官網(wǎng)的說明來配置,可以試一下clear project或者把SO文件也全部導(dǎo)入到libs下,不過個(gè)人還是建議把文件刪除再導(dǎo)入一次,嚴(yán)格按照官網(wǎng)的說明操作。
(二)權(quán)限錯(cuò)誤,
原因:像這種錯(cuò)誤一般只出現(xiàn)在Android 6.0及以上的系統(tǒng)中,因?yàn)?code>Android 6.0及以上對敏感權(quán)限(Android的所有權(quán)限說明)要?jiǎng)討B(tài)申請。怎么看是知道這個(gè)錯(cuò)呢?一個(gè)是看你有沒有在代碼中申請這個(gè)權(quán)限,其次是在logcat中如果提示權(quán)限不足,這時(shí)候就要好好查看運(yùn)行日志看是哪個(gè)權(quán)限沒有申請到了。
解決方法:查看日志,動(dòng)態(tài)申請權(quán)限(不知道的可以百度下)
(三)出現(xiàn)latitude : 4.9E-324 lontitude : 4.9E-324代碼
說明一下:出現(xiàn)這行代碼的原因有很多,只要是沒有定到位返回的經(jīng)緯度都是這行代碼,因?yàn)槭前俣鹊貓DSDK本身聲明的latitude=4.9E-324 lontitude=4.9E-324,具體如何查看還是看返回的error code是多少,然后根據(jù)這個(gè)在網(wǎng)上查找相關(guān)資料來解決問題。
在這里,我想特別說明一下的是,Android模擬器不能定位成功,Android模擬器不能定位成功,Android模擬器不能定位成功,重要的事情說三遍,你用Android模擬器會(huì)出現(xiàn)各種各樣的報(bào)錯(cuò)代碼,可能67,162,167還會(huì)輪換著出現(xiàn)(你說神不神奇),讓你一臉懵逼甚至誤導(dǎo)方向,明明沒問題還要去各種找問題(我就是掉進(jìn)這個(gè)大坑里爬了兩天換真機(jī)測試才爬出來的·····嗚嗚嗚),不要問我原因,流淚不想說原因···
最后的最后,給即將掉進(jìn)坑里或者已經(jīng)掉進(jìn)過坑里的各位一些方法:
- 一是碰到問題要善于打
log,在logcat中尋找自己需要的信息以及答案; - 二是寫之前第一步是研讀開發(fā)文檔,認(rèn)真研讀細(xì)節(jié),你只有了解了開發(fā)文檔才能懂得它的運(yùn)用,才能在碰到問題的時(shí)候知道該怎么辦,而不是把錯(cuò)誤往網(wǎng)上一搜(可能會(huì)找到答案,也可能會(huì)白消耗很多時(shí)間);
- 其次是勤于搜索,把自己不會(huì)的問題貼上去,不要盲目搜索,而是有針對性、有效率的搜索,為解決bug多嘗試幾種方法(吐槽一句,改未知的神奇的bug真是改的懷疑人生);
希望這篇文章能給大家?guī)硪稽c(diǎn)幫助,如果文章有什么疑問或者不足之處可以給我留言~