淺析LocationManager的位置定位


針對定位服務,android的API里提供了LocationManager這么一個類

通過getLastKnownLocation(String provider)以及requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)方法可以獲取到當前位置

此類提供兩種定位方式:GPS定位和網絡定位(基站+WIFI)

GPS定位的provider是LocationManager.GPS_PROVIDER,   網絡定位則是LocationManager.NETWORK_PROVIDER

不過這兩個接口都受限於系統設置,如下圖:

如果上面兩個開關都關了,自然就無法獲取到GPS經緯度了(如何擺脫這種限制通過其他方式獲取經緯度在下一章再介紹)

(假定開關都打開的前提)

 

GPS定位的獲取方式

通過getLastKnownLocation(String provider)傳對應參數,此時得到的Location並非當前的GPS位置信息,而是上一次獲取到的位置信息

而requestLocationUpdates才是真正去請求位置信息的更新,可以理解為調用該方法后,會安裝指定的規則去收集GPS信息,例如你請求locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,30 * 1000, 0, myListenGPS);

則每隔三十秒鍾會收集一次GPS信息,如果收集到的話,會保存到系統存儲中(保存至系統存儲屬個人理解)並通知myListenGPS監聽器位置信息改變同時調用監聽器onLocationChanged(Location location),那么每次我們調用getLastKnownLocation事實上就是從這個系統存儲中獲取這個信息,所以如果我們不調用此方法,getLastKnownLocation獲取到的就

可能是N天以前的位置信息了。

 

網絡定位的獲取方式

其實同GPS差不多,保存到系統存儲中的位置自然是跟GPS分開的。

 

二者區別

GPS定位准確,但在室內幾乎無法定位而導致無法收集信息,即有定位盲區;網絡定位偏差較大,但無盲區,只要有網絡一般都可以收集的到;

另外經過本人手機實測,如果requestLocationUpdates的時候設置最少更新時間1S,最小更新距離為0的時候,GPS定位在有信號的情況下的確是每秒都刷新位置,

但網絡定位大概是四五十秒更新一次(可能跟手機信號有關),如果把它設置為60秒的話,基本上兩種定位方式都在六七十秒后更新位置信息

所以這個時間還是有些偏差的,這點大家務必要注意

部分童鞋可能對網絡定位(基站+WIFI)不是很理解,簡單來說就是你當前接入WIFI就使用WIFI定位,當前接入2G或3G網就是基站定位

其實針對基站和WIFI有單獨的定位方式,只不過系統幫我們封裝了這么個智能的方法,好是好就是受限於設置開關

為了達到實時定位的功能,現在廣為流傳的是GPS+基站定位方式,該基站定位即單獨的定位方式,不受開關限制,所以在各個應用中用得比較多

如何基站定位且聽下回分解


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM