android telephone 4.2 framework层分析

framework层的相关代码主要在GSMPhone、CallManager、GSMCallTracker、TelePhonyManager中。

GSMPhone:

与GSMPhone关联的主要是Phone.java、PhoneBase.java、GSMPhone.java。Phone作为基类,定义了25对Handler消息注册和注销的接口,而PhoneBase继承Phone实现了24对,还有一对在GSMPhone中实现,而GSMPhone继承了PhoneBase。

如何管理Phone对象的呢?在应用层的PhoneApp中调用PhoneFactory的静态方法makeDefaultPhones创建Phone对象,而framework中采用的是代理模式和工厂模式实现,在makedefaultPhone中,创建了PhoneProxy,参数为GSMPhone或者CDMAPhone对象,通过PhoneProxy间接的访问GSMPhone,增加了安全性。

GSMPhone继承了PhoneBase,而PhoneBase中继承了Handler。使用了RegistrantList的消息处理机制,注册和注销Handler消息,并且发送notifyXXX方法发出多个注册的通知。在应用层中获取当前Phone的状态,getForegroundCall、getBackgroundCall、getRingingCall,实际获取的是GSMPhone中的mCT即CallTracker的属性。

        CallTracker 通话管理

主要功能在GSMCallTracker中实现,GSMCallTracker继承CallTracker,CallTracker继承Handler,因此GSMCallTracker的handleMessage接收CallTracker的消息。GSMCallTracker类主要提供两大处理能力:

1、通话控制能力,如拨号、接听来电、拒接、多方通话(conference)和交换通话(switchWaitingOrHoldingAndActive),最终都会调用operationComplete方法,完成了通话管理和控制操作,该方法中也会查询Call List通话列表,在接收到EVENT_CALL_STATE_CHANGE方法后(即通话状态变化后),调用pollCallsWhenSafe方法,查询当前CallList的通话列表。

2、Handler消息处理逻辑。接收的来自RIL对象cm的消息,包括通话状态的变化、无线通信模块Modem或者Radio开启、无线通信模块关闭或不可用状态,以及接收CallTracker的消息。

流程如下:

    CallManager可以被上层调用,它运行于framework层,接着调用GSMPhone的mCT对象调用dial、acceptCall等控制通话,Calltracker中会调用cm的控制方法,cm为RIL层的对象,RIL层处理完毕后,发起EVEMT_OPERATION_COMPLETE消息,在GSMCallTracker中处理,调用operationComplete,调用RIL的cm对象查询Call List列表,RIL层查询完毕后,发起EVENT_POLL_CALLS_RESULT消息,GSMCallTracker处理消息,调用handlePollCalls处理,更新通话状态并且发出相关的消息通知。

GSMCall的通话管理模型:

GSMCall中包含state状态和connections通话连接列表。GSMConnection保存了通话连接的基本信息,多个GSMConnection对象组成一路通话,而GSMCall管理state和connections,一路通话中有多个通话连接,即多方通话。

handlePollCalls方法:

通过接收到的Message消息,获取Call List,对象,强制转化为List对象,这时保存的实际上是DriverCall,RIL层的对象。匹配connections和DriverCall List中对应的DriverCall对象。dc.index== i++;conn表示老的通话连接,而dc表示新的通话连接。




    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值