转自于博客园---浅析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

不过这两个接口都受限于系统设置,如下图:http://www.cnblogs.com/jh5240/archive/2012/09/08/2676863.html(该博客地址)

 

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+基站定位方式,该基站定位即单独的定位方式,不受开关限

制,所以在各个应用中用得比较多如何基站定位且听下回分解

你可能感兴趣的:(android)