通话管理流程.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
通话管理流程

通话管理流程1.背景对于单模手机来说,如果USIM/SIM开通呼叫等待的话,可以有多个电话打入,并且这几个电话可以切换,对于CDMA是不支持切换的。如果是双模手机卡一和卡二都开通呼叫等待,那么当有多个电话在通话时该如何对通话进行管理呢?这就需要我们对通话进行管理。2.几个主要类对通话的管理2.1 Call对通话连接的管理针对CDMA和GSM的不同,CDMA和GSM分别继承实现了CDMACall和GSMCall。Call管理当前一路通话的状态。一路通话里面可以有不定个连接,所以Call里面维护了一个Connection的一个List。对CDMA和GSM分别维护的Connetion的最大个数也不相同。CDMA只运行一个连接,GSM最大可以允许五个连接。2.2CallTracker对通话的管理针对CDMA和GSM的不同,CDMA和GSM分别继承实现了CDMACallTracker和GSMCallTracker。CallTracker实现对Call的管理。Call的状态可以分为三种:Ring call,foreground call, background call. CallTracker对这三种Call进行维护。2.3 Phone对通话的管理针对CDMA和GSM的不同,有CDMAPhone和GSMPhone,外部通过Phone才可以调用到CallTracker的相关方法。2.4 CallManager对通话的管理Phone是针对某一个网络进行管理的,例如C网或者G网。但是CallManager管理C网和G网所有通话。3.消息传递管理先撇开通话来说,上层应用牵扯到和BP相关的功能,都需要先和RIL交互,然后通过RIL上报的事件再进行处理的。那么我们的通话同样是这样的。3.1 注册RIL事件回调对于通话部分来说,都是通过CallTracker来注册RIL的上报事件的。 GsmCallTracker (GSMPhone phone) { this.phone = phone; cm = phone.mCM;cm.registerForCallStateChanged(this, EVENT_CALL_STATE_CHANGE, null); cm.registerForOn(this, EVENT_RADIO_AVAILABLE, null); cm.registerForNotAvailable(this, EVENT_RADIO_NOT_AVAILABLE, null);}3.2 注册Calltracker事件回调Calltracker对这些事件做过想要的处理之后,会调用相应的Phone的方法。例如通话状态变化时,经过一系列的判断之后会调用Phone不同的方法protected void handlePollCalls(AsyncResult ar)……if (unknownConnectionAppeared) { phone.notifyUnknownConnection(); } if (hasNonHangupStateChanged || newRinging != null) { phone.notifyPreciseCallStateChanged();}……}3.3 注册Phone的事件回调在CallManager中注册相应的事件。和通话相关的事件都是在CallManager中注册的。CallManager负责在当前网络状态发生改变时更新Phone实例。在更新的过程中注册相应的Phone的事件回调。privatevoid registerForPhoneStates(Phone phone) { // for common events supported by all phonesphone.registerForPreciseCallStateChanged(mHandler, EVENT_PRECISE_CALL_STATE_CHANGED, null);phone.registerForDisconnect(mHandler, EVENT_DISCONNECT, null); phone.registerForNewRingingConnection(mHandler, EVENT_NEW_RINGING_CONNECTION, null);phone.registerForUnknownConnection(mHandler, EVENT_UNKNOWN_CONNECTION, null); phone.registerForIncomingRing(mHandler, EVENT_INCOMING_

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档