Android电话系统之GSMCallTracker

Android电话系统之GSMCallTracker

ID:37915403

大小:23.50 KB

页数:4页

时间:2019-06-02

Android电话系统之GSMCallTracker_第1页
Android电话系统之GSMCallTracker_第2页
Android电话系统之GSMCallTracker_第3页
Android电话系统之GSMCallTracker_第4页
资源描述:

《Android电话系统之GSMCallTracker》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Android电话系统之GSMCallTracker通话连接管理GSMCallTracker在本质上是一个Handler。GSMCallTracker是Android的通话管理层。GSMCallTracker建立了ConnectionList来管理现行的通话连接,并向上层提供电话调用接口。在GSMCallTracker中维护着通话列表:connections。顺序记录了正连接上的通话,这些通话包括:ACTIVE,DIALING,ALERTING,HOLDING,INCOMING,WAITING等状态

2、的连接。GSMCallTracker将这些连接分为了三类别进行管理:RingingCall:INCOMING,WAITINGForegourndCall:ACTIVE,DIALING,ALERTINGBackgroundCall:HOLDING上层函数通过getRingCall(),getForegrouandCall()等来获得电话系统中特定通话连接。为了管理电话状态,GSMCallTracker在构造时就将自己登记到了电话状态变化通知表中。RIL-Java一收到电话状态变化的通知,就会使用EVE

3、NT_CALL_STATE_CHANGE通知到GSMCallTacker在一般的实现中,我们的通话CallTable是通过AT+CLCC查询到的,CPI可以通知到电话的改变,但是CPI在各个Modem的实现中差别比较大,所以参考设计都没有用到CPI这样的电话连接改变通知,而是使用最为传统的CLCC查询CALLTABLE。在GSMTracker中使用connections来管理Android电话系统中的通话连接。每次电话状态发生变化是GSMTracker就会使用CLCC查询来更新connections

4、内容,如果内容有发生变化,则向上层发起电话状态改变的通知。1RIL-JAVA中发起电话连接列表操作在RIL-JAVA中涉及到CurrentCallList查询的有以下几个操作:(1)hangup(2)dial(3)acceptCall(4)rejectCall在GSMcallTracker在发起这些调用的时候都有一个共同的ResultMessage构造函数:obtainCompleteMessage()。obtainCompleteMessage()实际上是调用:obtainCompleteMess

5、age(EVENT_OPERATION_COMPLETE)这就意味着在这些电话操作后,GSMCallTracker会收到EVENT_OPERATION_COMPLETE消息,于是我们将目光转移到handleMessage()@GSMCallTracker的EVENT_OPERATION_COMPLETE事件处理:operationComplete@GSMCallTracker。operationComplete()操作会使用cm.getCurrentCalls(lastRelevantPoll)调用

6、,向RILD发起RIL_REQUEST_GET_CURRENT_CALLS调用,这个最终就是向Modem发起AT+CLCC,获取到真正的电话列表。2在RILD中,引起getCurrentCalls调用(1)在RILD中,收到URC消息:+CRINGRINGNOCARRIER+CCWA将会使用RIL_onUnsolicitedResponse(RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED),主动向ril-java上报RIL_UNSOL_RESPONSE_CALL_STAT

7、E_CHANGED消息。(2)在处理requestCurrentCalls时,使用CLCC查询通话连接(CALLTABLE)后,如何发现有callTable不为空则开启一个定时器,主动上报RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED消息,直到没有电话连接为止。在RIL-Java层收到RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED这个URC,并利用mCallStateRegistrants.notifyRegistrants(newAsyncR

8、esult(null,null,null))来通知电话状态的变化,此时GSMTracker会接收到EVENT_CALL_STATE_CHANGE消息,并使用pollCallsWhenSafe()->cm.getCurrentCalls(lastRelevantPoll);来发起查询,并更新JAVA层的电话列表。3handlePollCalls电话列表刷新首先我们来看看是什么引起了handlePollCalls的调用。上面的1,2分析了,Android电话系统中所有引起

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。