Framework中网络定位服务简介
生活随笔
收集整理的這篇文章主要介紹了
Framework中网络定位服务简介
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
前人已經(jīng)將LocationManangerService的框架介紹的很不錯(cuò)了,可以參見(jiàn)下面的帖子
http://www.ibm.com/developerworks/cn/opensource/os-cn-android-location/index.html#major2?
其中介紹了整個(gè)GPS定位的代碼框架。
下面針對(duì)其中的網(wǎng)絡(luò)定位做一些補(bǔ)充: LocationManangerService在systemServer中被啟動(dòng)創(chuàng)建,同時(shí)執(zhí)行其systemReady方法(所有其他級(jí)別的服務(wù)都是這樣的執(zhí)行流程),這個(gè)方法中開(kāi)啟了一個(gè)線程,創(chuàng)建了一個(gè)屬于它的handler用于控制service的工作,并開(kāi)始init初始化,在這里定位服務(wù)加載當(dāng)前系統(tǒng)所支持的LocationProvider。?
這里有關(guān)的三個(gè)類分別是:
LocationProviderProxy.java是框架中用來(lái)封裝遠(yuǎn)程服務(wù)端操作的類,名為Proxy其實(shí)是服務(wù)端本地代理的裝飾類。
ServiceWatcher.java充當(dāng)了一個(gè)遠(yuǎn)程服務(wù)管理者,用于綁定服務(wù)以及管理服務(wù)的本地代理。
ILocationProvider.aidl定義了定位服務(wù)的接口,網(wǎng)絡(luò)定位提供商按照這個(gè)接口約束來(lái)實(shí)現(xiàn)。
LocationProviderBase.java定義了網(wǎng)絡(luò)定位提供商實(shí)現(xiàn)接口的虛類,內(nèi)部實(shí)現(xiàn)了以上的樁類,并留了一組虛方法用于具體實(shí)現(xiàn)。
看這些類就知道對(duì)于網(wǎng)絡(luò)定位來(lái)說(shuō)LocationManangerService是一個(gè)客戶端,網(wǎng)絡(luò)定位模塊是一個(gè)服務(wù)端,是通過(guò)ILocationProvider.aidl來(lái)實(shí)現(xiàn)的。
這樣整個(gè)流程就是這樣的:
LocationManangerService服務(wù)中通過(guò)binder遠(yuǎn)程服務(wù)(注意這里的Action是:com.android.location.service.v2.NetworkLocationProvider)并使用其LocationProviderProxy本地代理來(lái)進(jìn)行的操作,Proxy實(shí)現(xiàn)LocationProviderInterface使得服務(wù)使用起來(lái)和其他LocationProvider一致實(shí)現(xiàn)運(yùn)行時(shí)的動(dòng)態(tài)綁定,遠(yuǎn)程端擴(kuò)展LocationProviderBase實(shí)現(xiàn)其onEnable,onSetRequest等一系列虛方法來(lái)完成定位的操作。
http://www.ibm.com/developerworks/cn/opensource/os-cn-android-location/index.html#major2?
其中介紹了整個(gè)GPS定位的代碼框架。
下面針對(duì)其中的網(wǎng)絡(luò)定位做一些補(bǔ)充: LocationManangerService在systemServer中被啟動(dòng)創(chuàng)建,同時(shí)執(zhí)行其systemReady方法(所有其他級(jí)別的服務(wù)都是這樣的執(zhí)行流程),這個(gè)方法中開(kāi)啟了一個(gè)線程,創(chuàng)建了一個(gè)屬于它的handler用于控制service的工作,并開(kāi)始init初始化,在這里定位服務(wù)加載當(dāng)前系統(tǒng)所支持的LocationProvider。?
這里有關(guān)的三個(gè)類分別是:
LocationProviderProxy.java是框架中用來(lái)封裝遠(yuǎn)程服務(wù)端操作的類,名為Proxy其實(shí)是服務(wù)端本地代理的裝飾類。
ServiceWatcher.java充當(dāng)了一個(gè)遠(yuǎn)程服務(wù)管理者,用于綁定服務(wù)以及管理服務(wù)的本地代理。
ILocationProvider.aidl定義了定位服務(wù)的接口,網(wǎng)絡(luò)定位提供商按照這個(gè)接口約束來(lái)實(shí)現(xiàn)。
LocationProviderBase.java定義了網(wǎng)絡(luò)定位提供商實(shí)現(xiàn)接口的虛類,內(nèi)部實(shí)現(xiàn)了以上的樁類,并留了一組虛方法用于具體實(shí)現(xiàn)。
看這些類就知道對(duì)于網(wǎng)絡(luò)定位來(lái)說(shuō)LocationManangerService是一個(gè)客戶端,網(wǎng)絡(luò)定位模塊是一個(gè)服務(wù)端,是通過(guò)ILocationProvider.aidl來(lái)實(shí)現(xiàn)的。
這樣整個(gè)流程就是這樣的:
LocationManangerService服務(wù)中通過(guò)binder遠(yuǎn)程服務(wù)(注意這里的Action是:com.android.location.service.v2.NetworkLocationProvider)并使用其LocationProviderProxy本地代理來(lái)進(jìn)行的操作,Proxy實(shí)現(xiàn)LocationProviderInterface使得服務(wù)使用起來(lái)和其他LocationProvider一致實(shí)現(xiàn)運(yùn)行時(shí)的動(dòng)態(tài)綁定,遠(yuǎn)程端擴(kuò)展LocationProviderBase實(shí)現(xiàn)其onEnable,onSetRequest等一系列虛方法來(lái)完成定位的操作。
?一般手機(jī)中的網(wǎng)絡(luò)位置服務(wù)都是基于第三方的比如百度,谷歌等,所以這部分代碼沒(méi)有在源碼中看到,但是可以分析一下源碼中的FusedLocationProvider.java,這個(gè)與NetworkLocationProvider的架構(gòu)是一致的。
原文地址: http://blog.csdn.net/hehui1860/article/details/38560953
總結(jié)
以上是生活随笔為你收集整理的Framework中网络定位服务简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android Binder基本概念流程
- 下一篇: Binder学习指南