<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                GPS的根本目的是為使用者提供位置相關的信息。Android系統設計了一個以LocationManagerService為核心的位置管理架構提供相關的位置服務。 圖9-29所示的Android平臺LocationManager架構按順時針可分為四部分。 :-: ![](https://box.kancloud.cn/cd38516c0f5074bc8da561bbd68df8b7_1274x682.jpg) 圖9-29 Android平臺中LocationManager架構 第一部分為LocationManagerService(簡稱LMS)和其客戶端LocationManager(簡稱LM)。LMS和Android Java Framework中其他Service一樣由SystemServer創建并運行在system_process進程中[^①]。LMS內部將統一管理Android平臺中能提供位置服務的相關模塊,而LM為那些需要使用位置服務的應用程序服務。LM和LMS之間通過Binder進行交互。下節所示的示例應用程序將介紹LM的用法。 Android平臺中能提供位置服務的相關模塊統稱為Location Provider(位置提供者,LP)。位置提供者必須實現LocationProviderInterface接口。這些接口對應的對象實例由LMS來創建和管理。在所有這些位置提供者中,Android Framework實現了其中的PassiveProvider和GpsLocationProvider。這兩個LP由LMS創建并運行在system_process進程中。下文介紹LMS時還會詳細介紹PassiveProvider和GpsLP。 除了使用GPS定位外,系統還支持網絡定位(Network Location)方法來獲取位置信息。這種方法大致的工作原理是,某地區的移動通信基站(Cell Tower)或無線網絡AP的位置信息都已事先獲取并保存在相關服務提供商的服務器上。當手機使用網絡定位時,它首先向服務器查詢自己所連接或搜索到的基站位置或AP的位置,然后根據信號的強度推算自己的大致位置。相比GPS定位而言,網絡定位速度快,耗電少,適用于室內和室外,但精度較GPS差。Android原生代碼并不提供Network Location Provider相關的功能,它一般由第三方應用廠商提供,例如Google的GMS(Google Mobile Service)包中有一個NetworkLocation.apk就提供了該功能,而國內上市的手機則使用百度公司提供的NetworkLocation_Baidu.apk。由于它們運行在應用程序所在的進程中,所以系統定義了ILocationProviderProxy接口使LMS能管理這些由應用程序提供的位置服務。這些應用的位置服務需要實現LocationProviderBase抽象類。相關類結構如圖中區域3所示。 區域3中的FusedLocationProvider是一個比較有意思的LP。它本身不能提供位置信息,其內部將綜合GpsLP和NetworkLP的位置信息,然后向使用者提供最符合使用者需求的數據。即它能根據使用者對電源消耗、精度兩方面的要求以選擇GpsLP或/和NetworkLP作為真實的LP。同時,FusedLP能選擇GpsLP或NetworkLP提供的位置信息中最好的那一個返回給使用者。簡單點說,FusedLP出現之前,一個比較完善的LP客戶端需要同時操作和管理GpsLP和NetworkLP,而有了FusedLP后,客戶端只需要使用它即可,其余事情由FusedLP內部來管理。注意,FusedLP也由應用程序提供,它運行在FusedLocationProvider.apk所在的進程中。 除了提供位置信息外,系統(借助第三方應用提供)還支持位置信息和地址信息相互轉換,即得到某個地址(如國家、市區、街道名等)的位置信息(如經緯度信息),或者根據位置信息得到其對應的地址信息。由于地址和位置信息的映射關系一般也由第三方應用提供,所以LMS利用GeocodeProxy和第三方應用中實現IGeocodeProvider的對象交互。相關類結構如圖中 區域4所示。 >[info] 提示 FusedLocationProvider的代碼非常簡單,感興趣的讀者可自行研究。可參考SDK中關于這方面的討論,其位置為https://developer.android.com/guide/topics/location/strategies.html。 了解Android平臺中LM的架構后,筆者從以下兩個方面詳細介紹Android中的位置管理模塊。 * 通過一個示例展示如何利用LocationManager功能來獲取自己的位置信息以及地址信息。 * 介紹LMS相關的模塊及工作原理。這些模塊包括LocationManagerService、GpsLocationProvider、GPS HAL層相關控制接口等。 [^①]: 關于system_process,讀者可閱讀《深入理解Android:卷Ⅱ》第3章。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看