1.frameworks/base/location/java/android/location
这里主要是用来被App调用的,API包是android.location。
2.frameworks/base/location/java/com/android/internal/location
这个目录是Framework对Location服务的内部实现。
3.framework\services\java\com\android\server
这个目录只有一个文件
|-- LocationManagerService.java
是Location服务对内部实现的一种封装。
JNI:
2.2
frameworks/base/core/jni/android_location_GpsLocationProvider.cpp
2.3
/framework/base/services/jni/com_android_server_location_GpsLocationProvider.cpp
JNI层只有一个文件,起到承上启下的作用。上层承接Framework,下层调用HAL层具体硬件抽象实现。
HAL:Hardware Abstract Layer 硬件抽象层
hardware\libhardware_legacy\gps
hardware\libhardware_legacy\include\hardware_legacy\gps.h
HAL层相当于一个linux应用程序接口,通过open,close等操作,操作硬件设备。Android的源代码只实现了模拟器的gps接口,具体在文件gps_qemu.c中。在2.2版本中提供了对QCOM公司的gps的实现,在以下目录:
\hardware\qcom
下面介绍几个重要的数据结构:
1. GpsInterface接口是gps模块中最重要的数据结构,它是底层驱动实现的接口,如果要porting到自己的板子上,就需要实现这些接口。该接口的定义在gps.h中,模拟器实现在gps_qemu.c中。
-
- typedef struct {
-
- size_t size;
-
-
-
-
- int (*init)( GpsCallbacks* callbacks );
-
-
- int (*start)( void );
-
-
- int (*stop)( void );
-
-
- void (*cleanup)( void );
-
-
- int (*inject_time)(GpsUtcTime time, int64_t timeReference,
- int uncertainty);
-
-
-
-
-
-
- int (*inject_location)(double latitude, double longitude, float accuracy);
-
-
-
-
-
-
- void (*delete_aiding_data)(GpsAidingData flags);
-
-
-
-
-
-
- int (*set_position_mode)(GpsPositionMode mode, GpsPositionRecurrence recurrence,
- uint32_t min_interval, uint32_t preferred_accuracy, uint32_t preferred_time);
-
-
- const void* (*get_extension)(const char* name);
- } GpsInterface;
2.GpsCallbacks回调函数
这个是回调函数结构体,定义也在gps.h中。它们的实现是在com_android_server_location_GpsLocationProvider.cpp中,google已经实现了,我们不需要做任何动作。
2.2
-
- typedef struct {
-
- size_t size;
- gps_location_callback location_cb;
- gps_status_callback status_cb;
- gps_sv_status_callback sv_status_cb;
- gps_nmea_callback nmea_cb;
- } GpsCallbacks;
2.3 中 多加入了 以下几个回调函数
- gps_set_capabilities set_capabilities_cb;
- gps_acquire_wakelock acquire_wakelock_cb;
- gps_release_wakelock release_wakelock_cb;
- gps_create_thread create_thread_cb;
3. GpsLocation
表示Locatin数据信息,底层驱动获得Location的raw信息,通常是nmea码,然后通过解析就得到了location信息。
其中Android2.3比android2.2多加入了 size 属性 以获取其大小。
-
- typedef struct {
-
- size_t size;
-
- uint16_t flags;
-
- double latitude;
-
- double longitude;
-
-
- double altitude;
-
- float speed;
-
- float bearing;
-
- float accuracy;
-
- GpsUtcTime timestamp;
- } GpsLocation;