手机版

android gps 代码 分析

发布时间:2021-06-08   来源:未知    
字号:

android

几个主要的文件及目录:

frameworks/base/location/* (client部分)

frameworks/base/core/jni/android_location_GpsLocationProvider.cpp (JNI 部分)

frameworks/base/services/java/com/android/serverLocationManagerService.java(server 部分) hardware/libhardware_legacy/gps/* (hardware 接口部分)

一是:控制通道,也就是由app层发起的比如enable或disable的控制命令。

example代码调用LocationManager.java ,再通过IPC来实现真正的调用。LocationManager.java 主要负责通信。具体的实现在LocationManagerService.java中。

接口文件是ILocationManager.aidl。在service中根据provider来创建了一个GpsLocationProvider.java,并通过JNI调

android_location_GpsLocationProvider.cpp,该文件再通过GPSInterface来调用硬件的具体实现代码。 二是:

enable后的Location数据和状态上报。对于数据的上报过程,主要就是关注几个callback函数。主要代码分析如下:

在 GpsLocationProvider.java文件中enable()一个GpsLocationProvider时,会启动一个

GpsEventThread,该线程主要就是调用了native_wait_for_event();通过JNI调用到了

anroid_location_GpsLocationProvider.cpp中的

android_location_GpsLocationProvider_wait_for_event();而该event的触发是由来自硬件驱动 Location数据包的上报,底层的硬件驱动程序会把raw gps

data通过pipe或其他的方式,送出来,这个要看gps驱动的实现了,我们通过自己实现的GpsInterface 来解析raw gps data并调用loaction_callback()来触发event并copy

Location数据,等待到event后再调用GpsLocationProvider.java中的reportLocation()上报Location.

除了框架代码外,我们自己需要实现的代码也分为两块,一个是app层的代码,app层我也提供一个简单的代码例子,请参考以下代码:

public class LocationSample extends Activity implements LocationListener {

private LocationManager lm;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(yout.main);

lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,1l,1l,this);

}

public void onLocationChanged(Location location) {

// TODO Auto-generated method stub

Log.d(TAG,"location: ");

}

public void onProviderDisabled(String provider) {

// TODO Auto-generated method stub

Log.d(TAG,"provider disable");

}

public void onProviderEnabled(String provider) {

// TODO Auto-generated method stub

android gps 代码 分析.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
×
二维码
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)