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