全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
android gps 初始化流程 概述:下面将从用户点击使能按钮开始的整个初始化流程跟踪一遍,这样在debug的时候可以确保gps时候是否真的被初始化好了=当用户空间点击seting下的gps使能按钮的时候,会调用函数到:frameworks/base/location/java/com/android/internal/location/GpsLocationProvider.java这时会调用构造函数:public GpsLocationProvider(Context context, ILocationManager locationManager) mThread = new GpsLocationProviderThread();mThread.start();. 在构造函数中会创建一个线程,会实例化一个消息处理对象: mHandler = new ProviderHandler();private final class ProviderHandler extends Handler Override public void handleMessage(Message msg)switch (msg.what) case ENABLE: if (msg.arg1 = 1) handleEnable(); else handleDisable(); break;case ENABLE_TRACKING: handleEnableLocationTracking(msg.arg1 = 1);break;.;那么线程和消息处理对象都ok后,进入的函数是:public void enable() synchronized (mHandler) mHandler.removeMessages(ENABLE);Message m = Message.obtain(mHandler, ENABLE);m.arg1 = 1;mHandler.sendMessage(m); 通过mHandler.sendMessage(m); 发送一个enable消息,接收消息方接收到enable消息后,调用函数handleEnable():private void handleEnable() if (DEBUG) Log.d(TAG, handleEnable);if (mEnabled) return;mEnabled = native_init();.mEventThread = new GpsEventThread();mEventThread.start(); else Log.w(TAG, Failed to enable location provider);NOTE:hanleEnable实际上做了两件事情:1. 通过native_init 调用jni接口初始化gps的相关数据结构2. 通过mEventThread = new GpsEventThread();创建事件监听线程来监听gps来自hal层的事件下面分别对以上两点做详细的跟踪:对第一点native_init,进入函数frameworks/base/core/jni/android_location_GpsLocationProvider.cpp实际上调用的是函数android_location_GpsLocationProvider_init():static jboolean android_location_GpsLocationProvider_init(JNIEnv* env, jobject obj)android_location_GpsLocationProvider.cpp(android_location_GpsLocationProvider_init);if (!sGpsInterface)sGpsInterface = gps_get_interface();if (!sGpsInterface | sGpsInterface-init(&sGpsCallbacks) != 0)return false;return true;这个函数主要是干两件事情:1. 填充sGpsInterface方法,通过调用函数gps_get_interface,这个函数在hardware/libhardware_legacy/gps/gps.cpp 调用流程是:gps_get_interface= gps_find_hardware= gps_get_hardware_interface=sLocEngInterface实际上sLocEngInterface就是static const GpsInterface的一个实例而已,里面实现gps所有操作的方法:loc_eng_init, loc_eng_start,loc_eng_stop,loc_eng_cleanup,loc_eng_inject_time,loc_eng_inject_location,loc_eng_delete_aiding_data,loc_eng_set_position_mode,loc_eng_get_extension,执行完这步,实际上就是将gps可能用到的所有方法都初始化好了。2. 执行sGpsInterface-init(&sGpsCallbacks),这里实际上执行就是loc_eng_init,这个方法,这个方法的关键代码如下:static int loc_eng_init(GpsCallbacks* callbacks)loc_api_glue_init();.memset(&loc_eng_data, 0, sizeof (loc_eng_data_s_type);loc_eng_data.location_cb = callbacks-location_cb;loc_eng_data.sv_status_cb = callbacks-sv_status_cb;loc_eng_data.status_cb = callbacks-status_cb;loc_eng_data.nmea_cb = callbacks-nmea_cb;.该函数实现两个功能:1. 通过loc_api_glue_init();实现的功能是创建一个与ARM9 rpc通讯的通道,这部分内容比较多,在数据流程的文件里面分析。2. 通过loc_eng_data.location_cb = callbacks-location_cb;将jni实现的方法注册到hal层,那么在hal调用相关函数的时候就可以实现hal层与jni的通讯,在数据流程文件里面分析。回到前面framework层的enable的时候,出了native_init之外,还做了一件事情,就是通过mEventThread = new GpsEventThread();创建一个监听线程,用来监听底层的事件:private final class GpsEventThread extends Thread public GpsEventThread() super(GpsEventThread); .native_wait_for_event(); if (DEBUG) Log.d(TAG, GpsEventThread exiting); 通过native_wa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年新能源汽车智能化研发岗年终技术成果与用户体验报告
- 2025年医药制造企业年度工作总结与药品生产报告
- 2026年中国邮政储蓄银行江苏分行秋季校园招聘备考题库附答案详解
- 激励机制设计
- 2025盘锦市兴隆台区公开招聘社区专职工作者25人备考题库含答案详解(巩固)
- 山东省惠民县第一中学高一下学期期末综合练习历史试题无答案
- 2025年新干县招聘城市社区专职网格员8人备考题库及答案详解(典优)
- 2025吉林通化市集安市消防救援大队招聘3人备考题库及答案详解(夺冠)
- 2026兴业银行长春分行秋季校园招聘备考题库参考答案详解
- 2026年度中国工商银行江苏省分行校园招聘1000人备考题库附答案详解(培优)
- 资产管理 文化数字资产交易实施指南 征求意见稿
- 医院内控培训
- 14-1《促织》(说课稿)-2024-2025学年高一语文下学期同步教学说课稿专辑(统编版必修下册)
- 【苏教版】2023-2024学年一年级上册科学期末测试卷5
- 内蒙古包头市昆都仑区2023-2024学年七年级上学期期末调研检测数学试卷(含解析)
- 甲亢完整课件完整版
- 数字经济学-教案全套 唐要家
- 供应商合作协议书范本2024年
- Unit 6 In a nature park Part A Lets talk Lets learn大单元整体教学设计
- 《进一步规范管理燃煤自备电厂工作方案》发改体改〔2021〕1624号
- 无线充电的远距供电
评论
0/150
提交评论