Framework中网络定位服务简介

前人已经将LocationManangerService的框架介绍的很不错了,可以参见下面的帖子
http://www.ibm.com/developerworks/cn/opensource/os-cn-android-location/index.html#major2
其中介绍了整个GPS定位的代码框架。

下面针对其中的网络定位做一些补充: LocationManangerService在systemServer中被启动创建,同时执行其systemReady方法(所有其他级别的服务都是这样的执行流程),这个方法中开启了一个线程,创建了一个属于它的handler用于控制service的工作,并开始init初始化,在这里定位服务加载当前系统所支持的LocationProvider。

这里有关的三个类分别是:
LocationProviderProxy.java是框架中用来封装远程服务端操作的类,名为Proxy其实是服务端本地代理的装饰类。
ServiceWatcher.java充当了一个远程服务管理者,用于绑定服务以及管理服务的本地代理。
ILocationProvider.aidl定义了定位服务的接口,网络定位提供商按照这个接口约束来实现。
LocationProviderBase.java定义了网络定位提供商实现接口的虚类,内部实现了以上的桩类,并留了一组虚方法用于具体实现。
看这些类就知道对于网络定位来说LocationManangerService是一个客户端,网络定位模块是一个服务端,是通过ILocationProvider.aidl来实现的。

这样整个流程就是这样的:
LocationManangerService服务中通过binder远程服务(注意这里的Action是:com.android.location.service.v2.NetworkLocationProvider)并使用其LocationProviderProxy本地代理来进行的操作,Proxy实现LocationProviderInterface使得服务使用起来和其他LocationProvider一致实现运行时的动态绑定,远程端扩展LocationProviderBase实现其onEnable,onSetRequest等一系列虚方法来完成定位的操作。

 一般手机中的网络位置服务都是基于第三方的比如百度,谷歌等,所以这部分代码没有在源码中看到,但是可以分析一下源码中的FusedLocationProvider.java,这个与NetworkLocationProvider的架构是一致的。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值