zoukankan      html  css  js  c++  java
  • 浅析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+基站定位方式,该基站定位即单独的定位方式,不受开关限制,所以在各个应用中用得比较多
    
    如何基站定位且听下回分解

  • 相关阅读:
    《构建之法(第三版)》第三章
    《深入理解计算机系统(第三版)》第三章
    《文献管理与信息分析》第二章
    Mendeley文献管理软件使用介绍
    《构建之法(第三版)》第二章
    2017-2018-1 20179202《Linux内核原理与分析》第十二周作业
    《深入理解计算机系统(第三版)》第二章
    2017-2018-1 20179202《Linux内核原理与分析》第十一周作业
    《文献管理与信息分析》第一章
    《构建之法(第三版)》第一章
  • 原文地址:https://www.cnblogs.com/jh5240/p/2676863.html
Copyright © 2011-2022 走看看