地理信息服务
1 Android的定位服务
通过获取移动设备上的GPS信息,基站信息,Wifi信息等与当前位置修改的信息,用来判断用户所处的具体位置,位置信息用经纬度表示。
定位服务是地理位置服务的基础。Android提供了多种定位手段。
定位服务框架
Android的位置信息,是通过不同的位置信息源来提供的,表示位置信息源的对象派生自LocationProvider。通过硬件收集信息,转换成位置信息。
Android的位置信息服务LocationProviderService,用来管理所有的位置信息源,并通过这些信息源向请求者提供当前的位置信息。位置信息服务运行在系统核心进程的独立线程中,在服务初始化时,根据配置信息实例化系统中预设的定位信息源对象。
调用组件可以使用LocationManager获取当前的位置信息,LocationManager.getLastKnownLocation获取最近一次系统进行定位保存的信息。如果需要获取最新的位置信息,则要请求更新并监听当前位置信息的变化LOcationListener。
更新并监听当前位置信息的变化一般在Activity.onResume进行。注销监听在Activity.onPause进行。
位置信息变更事件的注册需要调用LocationManager.requestLocationUpdates函数。
位置信息源
定位服务依托于多个不同的位置信息源,每个位置信息源对象都在独立的线程中运行。与位置服务通过Socket通信,并传递位置信息。
最基本的位置信息源,是依托GPS信息来确定设备的位置。GSP的获取需要底层设备的支持,但受硬件约束和抗干扰差。因此Android提供了另一种定位服务。
基于网络的定位服务。定位信息源对象会手机移动设备周边WIfi和基站信息,并通过网络发送至Google的定位服务。Google服务根据收集来的海量Wifi地址,基站地址和经纬度关系计算出当前的位置信息并返回用户。
定位的选择
选择位置信息源进行定位的依据是依照预设的标准,从众多定位信息源选择一个最好的提供定位。
利用LocationManager.getBestProvider得到name,再用LocationManager.getProvide(name)得到LocationProvider。
另一种方式是动态定位