估計(jì)很多小伙伴們?cè)陂_(kāi)發(fā)的時(shí)候會(huì)用到定位和地圖功能剥险,用的最多的應(yīng)該是百度地圖和高德地圖慧起,這兩天我在使用百度地圖定位的時(shí)候碰到了許多迷之bug畜挥,簡(jiǎn)直迷得不要不要的男图,把自己碰到的問(wèn)題記下來(lái)锰霜,給自己一個(gè)記錄筹误,也希望能給遇到同樣問(wèn)題的朋友提供一點(diǎn)幫助。
一癣缅、以百度地圖定位流程為例
首先推薦:百度開(kāi)發(fā)者官網(wǎng):Android定位SDK
過(guò)來(lái)人建議:強(qiáng)烈建議仔細(xì)研讀百度地圖官網(wǎng)的開(kāi)發(fā)文檔說(shuō)明纫事!
說(shuō)明:Android
開(kāi)發(fā),開(kāi)發(fā)工具為AndroidStudio
(一):申請(qǐng)百度賬號(hào)所灸,登錄并在開(kāi)發(fā)平臺(tái)創(chuàng)建一個(gè)應(yīng)用丽惶,拿到AK;
(二):申請(qǐng)密鑰爬立,可以參照官網(wǎng)的步驟钾唬,也可以參照郭霖大神在《第一行代碼》中步驟來(lái)(如果不知道的可以百度或者留言);
(三):配置環(huán)境,這是流程中最關(guān)鍵的一步抡秆,許多人問(wèn)題就出在這里奕巍。詳細(xì)步驟參考官網(wǎng)步驟.下載庫(kù)文件時(shí)你可以下載總的文件,也可以根據(jù)自己的需要下載自己需要的部分儒士,有定位的止、導(dǎo)航、全景等等着撩。
下載后你會(huì)得到一個(gè)壓縮文件诅福,解壓后可以看到有以下文件:
![](http://ww1.sinaimg.cn/large/005HNx1Sgy1fge9vp1yqxj30pm09rmxt.jpg)
官網(wǎng)說(shuō)的是將SO文件放到自己APP的對(duì)應(yīng)架構(gòu)下的文件夾中,即將前面有紅箭頭的五個(gè)文件夾都放入到jnilibs
文件夾下拖叙,其中jnilibs
是自己新建的文件夾氓润,其位置如下(project
模式下的):
![](http://ww1.sinaimg.cn/large/005HNx1Sgy1fgea30smq5j30ak0d8wen.jpg)
然后將剩下的一個(gè).jar文件放入
libs
文件夾下,再在build.gradle中(一般放buildTypes下面)使用以下代碼配置SO文件的使用薯鳍,
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
然后再配置 service
,聲明權(quán)限咖气,設(shè)置AcessKey,這些照著百度地圖開(kāi)發(fā)者官網(wǎng)的開(kāi)發(fā)手冊(cè)來(lái)就是了挖滤。運(yùn)氣很好的話 Sync project
然后跑一遍程序就能定到位了崩溪。但是今天這篇文章的重點(diǎn)不在這,而是在下面的報(bào)錯(cuò)斩松!對(duì)伶唯,沒(méi)錯(cuò),就是報(bào)錯(cuò)砸民!
二抵怎、可能遇到的報(bào)錯(cuò)
說(shuō)明:以下碰到的報(bào)錯(cuò)都是建立在你的代碼正確的基礎(chǔ)之上,而非指你的代碼邏輯或者語(yǔ)法不對(duì)而導(dǎo)致的錯(cuò)誤
(一)SO文件加載失敗, 這是報(bào)錯(cuò)問(wèn)題中最最常見(jiàn)的報(bào)錯(cuò)
原因:導(dǎo)進(jìn)去的.so文件沒(méi)有加載進(jìn)去岭参。怎么看才能知道是這個(gè)原因呢反惕?如果你把官網(wǎng)的代碼都寫(xiě)上去了的話,你在 AndroidStudio
下面的logcat
區(qū)域會(huì)遇到
error code : 162 latitude : 4.9E-324 lontitude : 4.9E-324
這樣的報(bào)錯(cuò)代碼演侯,通過(guò)查詢官網(wǎng)的錯(cuò)誤碼得知162就是.so文件加載失敗姿染,網(wǎng)上解決方式也是眾說(shuō)紛紜,前段時(shí)間開(kāi)發(fā)和現(xiàn)在一樣的代碼現(xiàn)在定位卻出了問(wèn)題秒际,同一款app不同機(jī)型一個(gè)報(bào)錯(cuò)一個(gè)卻正常悬赏,吐槽某度的一大片······
解決方法: 像碰到這種情況還是回頭檢查自己有沒(méi)有嚴(yán)格按照官網(wǎng)的說(shuō)明來(lái)配置,可以試一下clear project
或者把SO文件也全部導(dǎo)入到libs
下,不過(guò)個(gè)人還是建議把文件刪除再導(dǎo)入一次娄徊,嚴(yán)格按照官網(wǎng)的說(shuō)明操作闽颇。
(二)權(quán)限錯(cuò)誤,
原因:像這種錯(cuò)誤一般只出現(xiàn)在Android 6.0
及以上的系統(tǒng)中寄锐,因?yàn)?code>Android 6.0及以上對(duì)敏感權(quán)限(Android的所有權(quán)限說(shuō)明)要?jiǎng)討B(tài)申請(qǐng)兵多。怎么看是知道這個(gè)錯(cuò)呢尖啡?一個(gè)是看你有沒(méi)有在代碼中申請(qǐng)這個(gè)權(quán)限,其次是在logcat
中如果提示權(quán)限不足剩膘,這時(shí)候就要好好查看運(yùn)行日志看是哪個(gè)權(quán)限沒(méi)有申請(qǐng)到了衅斩。
解決方法:查看日志,動(dòng)態(tài)申請(qǐng)權(quán)限(不知道的可以百度下)
(三)出現(xiàn)latitude : 4.9E-324 lontitude : 4.9E-324
代碼
說(shuō)明一下:出現(xiàn)這行代碼的原因有很多怠褐,只要是沒(méi)有定到位返回的經(jīng)緯度都是這行代碼畏梆,因?yàn)槭前俣鹊貓DSDK本身聲明的latitude=4.9E-324 lontitude=4.9E-324
,具體如何查看還是看返回的error code
是多少奈懒,然后根據(jù)這個(gè)在網(wǎng)上查找相關(guān)資料來(lái)解決問(wèn)題奠涌。
在這里,我想特別說(shuō)明一下的是筐赔,Android
模擬器不能定位成功铣猩,Android
模擬器不能定位成功揖铜,Android
模擬器不能定位成功茴丰,重要的事情說(shuō)三遍,你用Android
模擬器會(huì)出現(xiàn)各種各樣的報(bào)錯(cuò)代碼天吓,可能67,162,167還會(huì)輪換著出現(xiàn)(你說(shuō)神不神奇)贿肩,讓你一臉懵逼甚至誤導(dǎo)方向,明明沒(méi)問(wèn)題還要去各種找問(wèn)題(我就是掉進(jìn)這個(gè)大坑里爬了兩天換真機(jī)測(cè)試才爬出來(lái)的·····嗚嗚嗚)龄寞,不要問(wèn)我原因汰规,流淚不想說(shuō)原因···
![](http://ww1.sinaimg.cn/large/005HNx1Sgy1fgebfiwf69j30al04ymy6.jpg)
最后的最后,給即將掉進(jìn)坑里或者已經(jīng)掉進(jìn)過(guò)坑里的各位一些方法:
- 一是碰到問(wèn)題要善于打
log
物邑,在logcat
中尋找自己需要的信息以及答案溜哮; - 二是寫(xiě)之前第一步是研讀開(kāi)發(fā)文檔,認(rèn)真研讀細(xì)節(jié)色解,你只有了解了開(kāi)發(fā)文檔才能懂得它的運(yùn)用茂嗓,才能在碰到問(wèn)題的時(shí)候知道該怎么辦,而不是把錯(cuò)誤往網(wǎng)上一搜(可能會(huì)找到答案科阎,也可能會(huì)白消耗很多時(shí)間)述吸;
- 其次是勤于搜索,把自己不會(huì)的問(wèn)題貼上去锣笨,不要盲目搜索蝌矛,而是有針對(duì)性、有效率的搜索错英,為解決bug多嘗試幾種方法(吐槽一句入撒,改未知的神奇的bug真是改的懷疑人生);
希望這篇文章能給大家?guī)?lái)一點(diǎn)幫助椭岩,如果文章有什么疑問(wèn)或者不足之處可以給我留言~