关于Android GPS 的 监听位置变化的函数的研究(1)

最近在搞Android上的GPS的东西, 老是上下不通,没有数据,调试中.因此仔细的分析了 从上到下的代码.灵魂函数是

requestLocationUpdates函数,主要是用来启动一个监视器,去监听位置变化信息

 

废话不多说开始分析

1.  首先找到requestLocationUpdates函数的位置

     /Android_work_path/frameworks/base/location/java/android/location/LocationManager.java

   

这个函数就是判断一下参数provider是否为空,不为空就去call 那个核心函数,很简单没难度

 

继续在该函数中查找

     这个时候的代码 会分开 一部分触发listener 还有一部分会去做Provider的动作(GPSLocation)

先讲GPS_PROVIDER动作

主要函数在/location/java/com/android/internal/location/GpsLocationProvider.java

启动一个线程序

新建一个ProviderHandle的东西

 

如果你是第一次启动初始化就是ENABLE

如果启动设备进行数据探测什么的就是ENABLE_TRACKING

下面根据ENABLE_TRACKING为例:

会去执行handleEnableLocationTracking函数

StarNavigating()函数是重点,再继续跟踪

native_start是在JNI层的.cpp文件实现的 我们现在去查看这个CPP文件

frameworks/base/core/jni/android_location_GpsLocationProivider.cpp

这里做了两个动作:1个是set_position_mode 2是start

sGpsInterface这个结构体原型是GpsInterface这个结构体来自

/android_work/hardware/libhardware_legacy/gps/XXX_gps.c中 具体定义了些操作,这层也就是我们通长所说的硬件抽象层HAL

 

可以看到gps_set_position_mode和gps_start这几个函数

 

而在这几个函数 中 会去调用芯片产商写的驱动的.so的函数

具体的比如 某产商叫做YYY那么他就可以在XXX_gps.c文件中先导入.so,然后使用自己的函数去操作硬件

 

PS:妈的 现在.so只公开部分源码, .a文件不公开 我草他吗的煞笔厂商 偏偏调到它那就出错,LSM(location session manager)挂掉了,还不给代码,让我搞毛啊.wating for ...

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值