解決Android原生定位的坑
Android原生定位的代碼網(wǎng)上已經(jīng)很多了,就不貼出來(lái)。
簡(jiǎn)單了解下:
GPS_PROVIDER:
通過(guò)手機(jī)內(nèi)置的GPS芯片,利用衛(wèi)星獲取定位信息。位置監(jiān)聽(tīng)、衛(wèi)星狀態(tài)監(jiān)聽(tīng)很耗電且室內(nèi)定位很不準(zhǔn)確。
NETWORK_PROVIDER:
網(wǎng)絡(luò)定位通過(guò)基站和WiFi節(jié)點(diǎn),利用節(jié)點(diǎn)id在定位數(shù)據(jù)服務(wù)器查詢位置信息。但是國(guó)內(nèi)網(wǎng)絡(luò)不允許,且有消息稱Google已不提供該服務(wù)。so網(wǎng)上出現(xiàn)的此種方式獲取定位信息不可用,也就是說(shuō)NETWORK_PROVIDER在國(guó)內(nèi)不可用。
PASSIVE_PROVIDER:
被動(dòng)定位,其他應(yīng)用比如百度、高德等使用了定位,系統(tǒng)會(huì)更新定位信息并保存下來(lái),通過(guò)此方式可以獲取最近一次的位置信息。
第三方SDK當(dāng)然好用了,但是要注意獲取的經(jīng)緯度是經(jīng)過(guò)了偏移的,只適配自己的地圖。比如用百度地圖SDK獲取的經(jīng)緯度在百度地圖上是準(zhǔn)確的,在高德地圖上顯示可能就會(huì)有一定的偏差。如果經(jīng)緯度和地圖不是成套使用就要考慮偏移的情況,而不是獲取的經(jīng)緯度不準(zhǔn)確。第三方SDK都有自己的網(wǎng)絡(luò)定位數(shù)據(jù),他們的網(wǎng)絡(luò)定位不僅僅是依靠服務(wù)器查詢,還有一套算法支撐,所以室內(nèi)定位比較準(zhǔn)確。
有些項(xiàng)目不使用第三方SDK,只能用原生方法獲取定位。NETWORK_PROVIDER 被迫放棄,PASSIVE_PROVIDER 只能是輔助,GPS_PROVIDER 需要增加精度。
我是這么處理的:
1. addGpsStatusListener 監(jiān)聽(tīng)衛(wèi)星狀態(tài),當(dāng)信號(hào)值 > 1 的衛(wèi)星數(shù)量在4顆以上,才可以使用 GPS_PROVIDER;
2. 速度>0.5 且 精度 < 50 才會(huì)被認(rèn)為是有效的經(jīng)緯度數(shù)據(jù)(我的項(xiàng)目中設(shè)備是移動(dòng)的)。
補(bǔ)充:使用Android自帶api定位失敗的原因
前奏:使用高德百度等定位,集成那么麻煩。為何不使用android自帶的api進(jìn)行定位。省時(shí)省力?
1.使用自帶定位很簡(jiǎn)單,如下圖
2.繼承LocationListener
3.如果獲取到就解析數(shù)據(jù)
但是,問(wèn)題來(lái)了。
位置提供者就兩種方式,要么network,要么gps.
問(wèn)題:
1.使用gps,收不到任何回調(diào)。
2.使用network,一直回調(diào)onProviderDisabled
原因:那就是當(dāng)你在室內(nèi)開(kāi)發(fā)時(shí),你的手機(jī)根本就沒(méi)法獲取位置信息,你叫系統(tǒng)如何將位置信息通知給你的程序。
所以要從根本上解決這個(gè)問(wèn)題,就要解決位置信息獲取問(wèn)題。
剛剛也提到了,只有NETWORK_PROVIDER這種模式才是室內(nèi)定位可靠的方式,只不過(guò)由于大陸的怪怪網(wǎng)絡(luò),且大部分廠商也不會(huì)用google的服務(wù),這種定位方式默認(rèn)是沒(méi)法用的。
那怎么辦?好辦,找個(gè)替代的服務(wù)商就可以了,百度的位置信息sdk就可以解決這個(gè)問(wèn)題。
它的基本原理在上面已經(jīng)提到過(guò)了,就是搜集你的wifi節(jié)點(diǎn)信息和你的手機(jī)基站信息來(lái)定位。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Android實(shí)現(xiàn)Camera2預(yù)覽和拍照效果
這篇文章主要為大家詳細(xì)介紹了Android開(kāi)發(fā)之一個(gè)類實(shí)現(xiàn)Camera2預(yù)覽和拍照效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10Android高效加載大圖、多圖解決方案 有效避免程序OOM
這篇文章主要為大家詳細(xì)介紹了Android高效加載大圖、多圖解決方案,有效避免程序OOM,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10詳解Android如何實(shí)現(xiàn)自定義的動(dòng)畫曲線
最近在寫動(dòng)畫相關(guān)的篇章,經(jīng)常會(huì)用到 Curve 這個(gè)動(dòng)畫曲線類,那這個(gè)類到底怎么實(shí)現(xiàn)的?如果想自己來(lái)一個(gè)自定義的動(dòng)畫曲線該怎么弄?本文將為大家詳細(xì)解答2022-04-04詳解如何從原生Android 跳轉(zhuǎn)到hbuilder項(xiàng)目
這篇文章主要介紹了從原生Android 跳轉(zhuǎn)到hbuilder項(xiàng)目,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08Android快速開(kāi)發(fā)之定制BaseTemplate
這篇文章主要為大家詳細(xì)介紹了Android快速開(kāi)發(fā)之定制BaseTemplate的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02AndroidStuio插件開(kāi)發(fā)適用于jetbrains全家桶
這篇文章主要介紹了AndroidStuio插件開(kāi)發(fā)適用于jetbrains全家桶,本文通過(guò)實(shí)例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12Android實(shí)現(xiàn)手機(jī)震動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)手機(jī)震動(dòng)效果的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-02-02Flutter中如何加載并預(yù)覽本地的html文件的方法
這篇文章主要介紹了Flutter中如何加載并預(yù)覽本地的html文件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Flutter?彈性布局基石flex算法flexible示例詳解
這篇文章主要為大家介紹了Flutter?彈性布局基石flex算法flexible示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12Android TabWidget切換卡的實(shí)現(xiàn)應(yīng)用
本篇文章小編為大家介紹,Android TabWidget切換卡的實(shí)現(xiàn)應(yīng)用。需要的朋友參考下2013-04-04