天天看點

Android GPS學習筆記(1)—系統架構

Android GPS架構如下圖所示,整個定位服務的系統架構共分為六層。

(1)最上面是應用層,可安裝基于定位服務的應用,這些應用可以發起定位請求,比如百度地圖等。

(2)第二層是架構層(framework層),這一層包含了被APP調用的API以及系統服務的實作,主要由 Java 語言來實作。

       a. Java語言實作的API,即android.location包中的内容,主要用來被APP調用

目錄:frameworks/base/location/java/android/location

       b.系統服務實作

目錄1:frameworks/base/location/java/com/android/internal/location

這個目錄是Framework對Location服務的内部實作

目錄2:framework\base\services\core\java\com\android\server

這個目錄中的LocationManagerService.java是Location服務對内部實作的一種封裝

(3)第三層是JNI層

JNI層隻有一個檔案,起到承上啟下的作用。上層承接Framework,下層調用HAL層具體硬體抽象實作。

目錄:

frameworks/base/services/core/jni/com_android_server_location_GpsLocationProvider.cpp

(4)第四層是共享庫層(HAL層),本層由 C 以及 C++ 語言實作, 架構層與共享庫層使用 JNI進行銜接。HAL層相當于一個linux應用程式接口,通過open,close等操作,操作硬體裝置。

目錄:

hardware/qcom/gps

hardware/libhardware/include/hardware/gps.h

(5)第五層是 Linux核心層,整個Android系統都是以Linux核心為基礎的。

(6)最底層是GPS硬體裝置層

從上至下它們是逐層依賴的關系,每層依賴下面一層完成其所需提供的服務。

【概要定位流程】:由應用層APP發起定位請求,調用Framework層提供的API接口,此時會去啟動一個定位服務的線程,通過LocationManagerService定位服務,會調用到對應的Location provider,然後通過native方法調用到JNI中,JNI獲得GpsInterface并傳遞給接口一個回調函數的實作。GpsInterface是HAL層最主要的實作。

原文:http://blog.csdn.net/dreamback1987/article/details/46558729