android telephone 4.2 framework层分析
来源:互联网 发布:南风知我意晋江书包网 编辑:程序博客网 时间:2024/06/05 04:21
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表示新的通话连接。
- android telephone 4.2 framework层分析
- android framework 层服务 分析
- android4.2 telephone应用层分析
- android framework 层源码分析常见方法
- Android framework层源码目录分析
- framework层服务分析
- Android telephone
- 【北京讲座】Android系统Framework层源码分析
- android源码解析------Media多媒体framework层分析
- android usb挂载分析---FrameWork层处理vold消息
- Android Framework分析 ---- 1消息处理机制 java层
- Android的framework层音量控制原理分析
- Android的framework层音量控制原理分析
- Android 关机流程分析-----(1)Framework层
- android源码解析------Media多媒体framework层分析
- android源生Browser分析(三)---Framework层
- Android 关机流程分析-----(1)Framework层
- Android Framework 分析---2消息机制Native层
- osgAudio编译
- 反转链表
- 利用DHT网络原理制作bt采集蜘蛛
- ogg长事务
- Class文件格式(2)-深入理解ClassFile
- android telephone 4.2 framework层分析
- 五种开源协议(GPL,LGPL,BSD,MIT,Apache)
- destoon在360浏览器下出现用户被强行注销的解决方法
- Android 数据查询query函数参数解析
- eclipse 快捷键大全,eclipse查找类,文件,添加注释
- 快速搭建ssh项目环境的具体步骤
- 高性能、高并发TCP服务器(多线程调用libevent)
- java String与Blob类型数据转换
- 互联网不能成攻击他国“利器”