Gps学习笔记1


1. 系统启动 SystemServer ,接着 SystemServer 创建 LocationManagerService. 并调用其 SystemReady ();


2. 在 SystemReady ()中, service 启动了一个线程,做了一些初始化( Handler,Intent,Observer ) , 主要是 loadProviders(), 该函数加载了可用的 location 接口,主要是三类, GpsLocationProvider , PassiveProvider , LocationProviderProxy 。

三类都是 LocationProviderInterface 的子类。

最后 updateProvidersLocked() 函数,根据属性打开或关闭相关的 location 接口(主要函数 enable() enableLocationTracking( state );disable() ),如有改变,则发送 Intent(LocationManager.PROVIDERS_CHANGED_ACTION ) 。


备注:

(1). 当 enable 的时候,会判断当前 listener 的个数,如个数大于 0 ,则 enableLocationTracking ( true )。


(2).enable 的主要工作:

a.native_init() 主要获取 gps 接口,调用 interface->init ( &cb )注册 callback 函数 , 创建监听线程并进入监听状态( pthread_create( &state->thread, NULL, gps_state_thread, state ) )。

当接受到 CMD_START 命令时候开始回调:

回调过程 state->callbacks.location_cb---->

location_callback(jni)-->reportLocation(java)-->Handler.sendMessage(MESSAGE_LOCATION_CHANGED )--->p.updateLocation(location);


b. 初始化扩展接口和 agps ,函数为 native_supports_xtra() 和 native_set_agps_server ( ... )




(3). enableLocationTracking (state) 主要通过 startNavigating( false ) stopNavigating() 来实现。

start Navigating(false){

native_set_position_mode()-->interface->set_position_mode();

native_start()-->interface->start()-->send CMD_START

}


private void stopNavigating() {

native_stop() -->interface->stop()--> -->send CMD_STOP

}


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值