Framework中网络定位服务简介
来源:互联网 发布:采集助手数据库 编辑:程序博客网 时间:2024/05/22 12:00
前人已经将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等一系列虚方法来完成定位的操作。
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
0 0
- Framework中网络定位服务简介
- Framework中网络定位服务简介
- 网络定位服务NetworkLocationProvider
- Android LBS中网络定位服务的实现方法
- 【android】网络定位服务NetworkLocationProvider
- Android framework中新增服务
- Robot framework中元素的定位
- Andrioid Framework中添加系统服务
- 无线adhoc和混合网络中的定位服务(翻译)
- 定位服务
- 网络中硬件设备简介
- Linux中网络接口简介
- Robot Framework-元素定位
- Android开发中定位解析(GPS定位、网络定位、位置地址解析)
- Android-Service(系统服务实例:定位,网络判断,电话服务 ,通知栏通知等)
- Android-Service(系统服务实例:定位,网络判断,电话服务 ,通知栏通知等)
- Android5.1.1源码 - 在Framework中添加自定义系统服务
- 在android framework中添加自定义系统服务
- Android Binder基本概念流程学习
- Udemy上免费的angualr2视频教程分享
- strcpy和memcpy主要有以下3方面的区别
- 基础概念4
- 编程小知识
- Framework中网络定位服务简介
- HTML <link> 标签
- 解决Eclipse 64位启动时,报jvm.dll错
- Android的服务(Service)(一)生命周期
- 分布式2----HTTP和请求
- 封锁机制
- Android的服务(Service)(二)Service的自动重启问题
- 车载360度全景监视系统
- Android-ListView的学习(二)