Android Telephony控制通话消息下发流程
Telephony控制通话消息下发流程
通话相关代码名称统一约定及运行进程汇总 | ||
路径 | 统称 | 进程 |
packages/app/Dialer | Dialer | com.android.dialer |
packages/service/telecomm | telecom | system_service |
packages/service/telephony | TeleService | com.android.phone |
framework/base/telecomm | framework | 无进程只是提供调用framwork |
framework/opt/Telephony | telephony | system_service或com.android.phone |
首先拨号流程和来电流程分析在前几篇中写道过来电流程,拨号流程。
我们在通话界面若想更改当前通话状态,比如挂断/接听当前接收来电,挂断/保持当前通话等操作,可以理解为是控制消息下发的过程,从Dialer——>Telecom——>TeleService——>RIL——>Modem,通话控制消息一层一层的下发,最终交给Modem处理具体的通话控制。通话状态更改完成后,在将通话状态变更的消息一层一层的上报,最后交给Dialer应用对通话界面进行更新和显示。
这里需要关注几个重点
三个应用的控制消息传递
Dialer应用展示的通话界面或来电界面均有控制通话状态请求的界面控制,通过滑动或是点击相关的控件,将触发通话转态控制,调用android.telecom.Call对象的hold方法,如步骤1,在步骤3的Dialer应用中,调用IInCallAdapter的holdCall服务接口完成第一次的跨进程服务接口调用,进入Telecom应用。Telecom应用首先更新Call状态,此处的Call对象为Telecom应用内部定义的类com.android.service.telecom.Call,步骤8调用IConnectionService的hold服务接口,完成第二次的款进程服务接口调用,进入到TeleService应用。TeleService应用中经过层层方法调用,由GsmCdmaCallTracker对象进行Call的hold操作,并将请求发给RIL对象,发出对应的RIL请求
IInCallAdapter接口汇总
IICallAdapter的Stub接口实现在Telecom应用的InCallAdapter类中,他主要由answerCall,rejectCall,playDtmfTone,mergeConference等接口构成;InCallAdapter对象则在InCallController对象绑定,IInCallService成功后创建。
IConnectionService接口汇总
IConnectionService的Stub接口实现在framework/base下的ConnectionService抽象类的匿名内部类中,mBinder为其对象,他主要由addConnectionServiceAdapter,createConnection等创建TelephonyConnection接口,以及answer,reject,hold,playDtmfTone等控制通话状态的接口构成。而在TeleService应用中,TelephonyConnectionService继承了抽象类TelephonyConnection。
Android通话模型,Dialer,telecom和TeleService三个系统应用主要负责的业务及运行进程空间,结合这四个通话的核心流程,可以抽象出模型,可以站在更高的层次去认识和理解Android Telephony通话功能。
流程图:
系统的分层
Dialer,Telecom和TeleService三大应用可以理解为:Dialer应用是普通的Android App应用,其运行进程的用户信息和进程信息,也能说明此问题;Telecom应用运行在system_service进程上,其进程用户名为system系统用户,说明他在运行在Android Framework框架层;TeleService应用运行的进程名是com.android.phone,用户名是radio,承载着Telephony Call协议栈,同样可以认为他运行在Android Framewrok框架层;最后RIL他运行在HAL(硬件抽象层)。
交互方式
Dialer,Telecom,TeleService和RIL都是通过服务进行交互的,在图中,他们之间有箭头连接的都是通过Service跨进程的接口调用实现的。Dialer与TeleService之间没有直接的消息传递,要通过Telecom进行消息中转,Telecom与RIL直接同样没有直接的消息传递,要通过TeleService进行消息中转。
通过服务进行跨进程接口调用实现消息的传递,服务接口调用本身就是同步的接口调用,在Service端的实现将转换为异步方式处理,待消息处理完成后,在使用回调的接口传递消息处理的结果
分解通话相关流程
根据消息的传递方向,可分成两大类
第一类 控制通话消息下发流程 : 应用层通过框架层向RIL发起通话管理和控制相关RIL请求,RIL转换成对应的消息发发送给Modem执行,其中包括拨号,接听电话,拒接电话,保持,恢复通话等。
第二类 为通话状态更新消息上报流程 :RIL收到的Modem的通话状态变化通知,通过框架层向应用层发起通话状态变化通知,包括来电,电话接通,进入通话中等。
Android Telephony控制通话消息下发流程相关推荐
- Android Telephony通话状态更新消息上报流程
Telephony通话消息上报流程 通话相关代码名称统一约定以及运行进程: 通话相关代码名称统一约定及运行进程汇总 路径 统称 进程 packages/app/Dialer Dialer com.an ...
- Android Telephony 9.0通话挂断连接处理机制(opt/Telephony)
前言:今天看了一下通话断开处理流程,所以做一个笔记来记录一下今天的学习成果. 通话断开连接一般有两种应用场景 本地主动挂通话 远端断开通话连接 (这里还包括网络挂断和对方挂断) 先处理本地挂断 本地主 ...
- Android Telephony分析(二) ---- RegistrantList详解
前言 本文主要讲解RegistrantList的原理,以及如何快速分析RegistrantList相关的代码流程. 在Telephony模块中,在RIL.Tracker(ServiceStateTr ...
- 【深入理解 android telephony 系列第一集 初识telephony】
深入理解 android telephony 深入理解 android telephony 系列第一集 初识telephony 1. 概述 2. Android Telephony 框架 3. And ...
- Android 7.0 挂断电话流程分析
1.图形显示 挂断电话分为本地挂断和远程对方挂断 2.本地挂断 1).点击按钮 先看按键的监听事件 CallCardFragment.java 中有对按钮的监听事件 @Overridepublic v ...
- Android Telephony分析(七) ---- 接口扩展(异步转同步)
本文是基于上一篇<Android Telephony分析(六) -- 接口扩展(实践篇)>来写的. 上一篇介绍的接口扩展的方法需要实现两部分代码: 1. 从APP至RIL,发送请求: ...
- Android Telephony分析(六) ---- 接口扩展(实践篇)
本文将结合前面五篇文章所讲解的知识,综合起来,实现一个接口扩展的功能. 如果还没有阅读过前面五篇文章的内容,请先阅读: <Android Telephony分析(一) - Phone详解 & ...
- Android Telephony分析(五) ---- TelephonyRegistry详解
本文紧接着上一篇文章<Android Telephony分析(四) -- TelephonyManager详解 >的1.4小节. 从TelephonyRegistry的大部分方法中: ...
- Android Telephony分析(三) ---- RILJ详解
前言 本文主要讲解RILJ工作原理,以便更好地分析代码,分析业务的流程. 这里说的RILJ指的是RIL.java (frameworks\opt\telephony\src\java\com\And ...
最新文章
- OpenCV 笔记(07)— Mat 对象输出格式设置(Python 格式、CSV 格式、NumPy 格式、C 语言格式)
- 【Codeforces】1015B Obtaining the String(字符串 交换)
- Mac OS X 常用快捷键一览
- iOS- UITableView could not hold the selected row after reload
- ubuntu中使用VsCode+Eigen创建Eiegn应用程序
- 20165320 第十周课上测试补做
- C语言实现简单而通用的字典算法(附完整源码)
- SAP UI5 应用读取 CSRF token 的 HTTP head 请求逻辑解析
- 数学--数论--HDU 12151七夕节 Plus (因子和线性筛)
- js中的字符长度问题
- 微信高并发资金交易系统设计方案——百亿红包背后的技术支撑
- file处理的一些内容
- OpenGL是什么?Win10+VS2019下搭建glfw+glad开发环境
- python新浪微博爬虫_scrapy实现新浪微博爬虫
- 自学笔记----三极管
- Mysql 免安装配置
- Excel VBA单元格数据自增1
- CESIUM例子学习(一)——动态模型加载
- Shell 使用 expr 进行数学运算
- 有可以提醒自己上下班打卡的手机便签软件吗?