針對定位服務,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+基站定位方式,該基站定位即單獨的定位方式,不受開關限制,所以在各個應用中用得比較多 如何基站定位且聽下回分解