欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Framework中网络定位服务简介

发布时间:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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的架构是一致的。


原文地址: http://blog.csdn.net/hehui1860/article/details/38560953

总结

以上是生活随笔为你收集整理的Framework中网络定位服务简介的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。