全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android电话系统之GSMCallTracker通话连接管理GSMCallTracker在本质上是一个Handler。GSMCallTracker是Android的通话管理层。GSMCallTracker建立了ConnectionList来管理现行的通话连接,并向上层提供电话调用接口。在 GSMCallTracker中维护着通话列表:connections。顺序记录了正连接上的通话,这些通话包 括:ACTIVE,DIALING,ALERTING,HOLDING,INCOMING,WAITING等状态的连接。GSMCallTracker将 这些连接分为了三类别进行管理:RingingCall: INCOMING ,WAITINGForegourndCall: ACTIVE, DIALING ,ALERTINGBackgroundCall: HOLDING上层函数通过getRingCall(),getForegrouandCall()等来获得电话系统中特定通话连接。为了管理电话状态,GSMCallTracker在构造时就将自己登记到了电话状态变化通知表中。RIL-Java一收到电话状态变化的通知,就会使用EVENT_CALL_STATE_CHANGE通知到GSMCallTacker 在一般的实现中,我们的通话Call Table是通过AT+CLCC查询到的,CPI可以通知到电话的改变,但是CPI在各个Modem的实现中差别比较大,所以参考设计都没有用到CPI这 样的电话连接改变通知,而是使用最为传统的CLCC查询CALL TABLE。在GSMTracker中使用connections来管理Android电话系统中的通话连接。每次电话状态发生变化是GSMTracker就会使用CLCC查询来更新connections内容,如果内容有发生变化,则向上层发起电话状态改变的通知。1 RIL-JAVA中发起电话连接列表操作在RIL-JAVA中涉及到CurrentCallList查询的有以下几个操作:(1)hangup(2)dial(3)acceptCall(4)rejectCall在GSMcallTracker在发起这些调用的时候都有一个共同的ResultMessage构造函数:obtainCompleteMessage()。obtainCompleteMessage()实际上是调用:obtainCompleteMessage(EVENT_OPERATION_COMPLETE)这 就意味着在这些电话操作后,GSMCallTracker会收到EVENT_OPERATION_COMPLETE消息,于是我们将目光转移到 handleMessage()GSMCallTracker的EVENT_OPERATION_COMPLETE事件处 理:operationCompleteGSMCallTracker。operationComplete() 操作会使用cm.getCurrentCalls(lastRelevantPoll)调用,向RILD发起 RIL_REQUEST_GET_CURRENT_CALLS调用,这个最终就是向Modem发起AT+CLCC,获取到真正的电话列表。2 在RILD中,引起getCurrentCalls调用(1)在RILD中,收到URC消息:+CRINGRINGNO CARRIER+CCWA将会使用RIL_onUnsolicitedResponse( RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED),主动向ril-java上报RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED消息。(2) 在处理requestCurrentCalls时,使用CLCC查询通话连接(CALL TABLE)后,如何发现有call Table不为空则开启一个定时器,主动上报RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED消息,直到没有电话连接为止。在 RIL-Java层收到RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED这个URC,并利用 mCallStateRegistrants.notifyRegistrants(new AsyncResult(null, null, null)来通知电话状态的变化,此时GSMTracker会接收到EVENT_CALL_STATE_CHANGE消息,并使用 pollCallsWhenSafe()- cm.getCurrentCalls(lastRelevantPoll);来发起查询,并更新JAVA层的电话列表。3 handlePollCalls电话列表刷新 首先我们来看看是什么引起了handlePollCalls的调用。 上面的1,2分析了,Android电话系统中所有引起电话连接列表更新的条件及其处理。他们共同的调用了cm.getCurrentCalls(lastRelevantPoll) 来完成电话列表的获取。lastRelevantPoll = obtainMessage(EVENT_POLL_CALLS_RESULT)我们这里就从可以看到获取到的电话列表Result使用handlePollCalls进行了处理。Result实际上是一个DriverCall列表,handlePollCalls的工作就是将当前电话列表与RIL-Java的电话列表对比,使用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人生与理想的演讲稿
- 天津国土资源和房屋职业学院《中原特色文化翻译实践》2025-2026学年第一学期期末试卷
- 康复护理与护理技术
- 2026年河北青年管理干部学院单招职业技能考试题库带答案
- 2026年河北轨道运输职业技术学院单招职业技能测试必刷测试卷及答案1套
- 2026年河南工业和信息化职业学院单招职业技能考试必刷测试卷必考题
- 2026年河南对外经济贸易职业学院单招职业技能考试必刷测试卷及答案1套
- 2026年河北机电职业技术学院单招职业适应性测试必刷测试卷带答案
- 2026年河南经贸职业学院单招职业适应性考试必刷测试卷及答案1套
- 2026年河南职业技术学院单招职业倾向性测试题库及答案1套
- 基于EVA的物流企业价值评估-以顺丰速运为例
- 2025年电大国际私法试题及答案
- 人教版(2024)八年级上册英语Unit 1 - Unit 8 单元话题作文+范文
- 苏州离婚协议书模板(2025版)
- 后天性膝内翻的护理查房
- 军品价格管理办法原文
- 尿液颜色与泌尿健康护理
- 美食拍摄技巧培训课件
- NBT 11551-2024 煤矿巷道TBM法施工及验收标准
- 外贸公司日报管理制度
- 2025医学十大谣言解析与辟谣
评论
0/150
提交评论