解決Android原生定位的坑
Android原生定位的代碼網(wǎng)上已經(jīng)很多了,就不貼出來(lái)。
簡(jiǎn)單了解下:GPS_PROVIDER:通過手機(jī)內(nèi)置的GPS芯片,利用衛(wèi)星獲取定位信息。位置監(jiān)聽、衛(wèi)星狀態(tài)監(jiān)聽很耗電且室內(nèi)定位很不準(zhǔn)確。
NETWORK_PROVIDER:網(wǎng)絡(luò)定位通過基站和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),通過此方式可以獲取最近一次的位置信息。
第三方SDK當(dāng)然好用了,但是要注意獲取的經(jīng)緯度是經(jīng)過了偏移的,只適配自己的地圖。比如用百度地圖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)聽衛(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)單,如下圖但是,問題來(lái)了。
位置提供者就兩種方式,要么network,要么gps.
1.使用gps,收不到任何回調(diào)。
2.使用network,一直回調(diào)onProviderDisabled
原因:那就是當(dāng)你在室內(nèi)開發(fā)時(shí),你的手機(jī)根本就沒法獲取位置信息,你叫系統(tǒng)如何將位置信息通知給你的程序。
所以要從根本上解決這個(gè)問題,就要解決位置信息獲取問題。
剛剛也提到了,只有NETWORK_PROVIDER這種模式才是室內(nèi)定位可靠的方式,只不過由于大陸的怪怪網(wǎng)絡(luò),且大部分廠商也不會(huì)用google的服務(wù),這種定位方式默認(rèn)是沒法用的。
那怎么辦?好辦,找個(gè)替代的服務(wù)商就可以了,百度的位置信息sdk就可以解決這個(gè)問題。
它的基本原理在上面已經(jīng)提到過了,就是搜集你的wifi節(jié)點(diǎn)信息和你的手機(jī)基站信息來(lái)定位。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章:
1. 如何基于python3和Vue實(shí)現(xiàn)AES數(shù)據(jù)加密2. 10個(gè)提供免費(fèi)PHP腳本下載的網(wǎng)站3. PHP擴(kuò)展之APC——Alternative PHP Cache(可選PHP緩存)4. PHP設(shè)計(jì)模式(四)原型模式Prototype實(shí)例詳解【創(chuàng)建型】5. Java 基于UDP協(xié)議實(shí)現(xiàn)消息發(fā)送6. Python編寫nmap掃描工具7. Java向Runnable線程傳遞參數(shù)方法實(shí)例解析8. python 爬取嗶哩嗶哩up主信息和投稿視頻9. ASP.NET MVC前臺(tái)動(dòng)態(tài)添加文本框并在后臺(tái)使用FormCollection接收值10. php5.6不能擴(kuò)展redis.so的解決方法
