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控制通话消息下发流程相关推荐

  1. Android Telephony通话状态更新消息上报流程

    Telephony通话消息上报流程 通话相关代码名称统一约定以及运行进程: 通话相关代码名称统一约定及运行进程汇总 路径 统称 进程 packages/app/Dialer Dialer com.an ...

  2. Android Telephony 9.0通话挂断连接处理机制(opt/Telephony)

    前言:今天看了一下通话断开处理流程,所以做一个笔记来记录一下今天的学习成果. 通话断开连接一般有两种应用场景 本地主动挂通话 远端断开通话连接 (这里还包括网络挂断和对方挂断) 先处理本地挂断 本地主 ...

  3. Android Telephony分析(二) ---- RegistrantList详解

    前言 本文主要讲解RegistrantList的原理,以及如何快速分析RegistrantList相关的代码流程.  在Telephony模块中,在RIL.Tracker(ServiceStateTr ...

  4. 【深入理解 android telephony 系列第一集 初识telephony】

    深入理解 android telephony 深入理解 android telephony 系列第一集 初识telephony 1. 概述 2. Android Telephony 框架 3. And ...

  5. Android 7.0 挂断电话流程分析

    1.图形显示 挂断电话分为本地挂断和远程对方挂断 2.本地挂断 1).点击按钮 先看按键的监听事件 CallCardFragment.java 中有对按钮的监听事件 @Overridepublic v ...

  6. Android Telephony分析(七) ---- 接口扩展(异步转同步)

    本文是基于上一篇<Android Telephony分析(六) -- 接口扩展(实践篇)>来写的.  上一篇介绍的接口扩展的方法需要实现两部分代码:  1. 从APP至RIL,发送请求:  ...

  7. Android Telephony分析(六) ---- 接口扩展(实践篇)

    本文将结合前面五篇文章所讲解的知识,综合起来,实现一个接口扩展的功能.  如果还没有阅读过前面五篇文章的内容,请先阅读:  <Android Telephony分析(一) - Phone详解 & ...

  8. Android Telephony分析(五) ---- TelephonyRegistry详解

    本文紧接着上一篇文章<Android Telephony分析(四) -- TelephonyManager详解 >的1.4小节.  从TelephonyRegistry的大部分方法中:  ...

  9. Android Telephony分析(三) ---- RILJ详解

    前言 本文主要讲解RILJ工作原理,以便更好地分析代码,分析业务的流程.  这里说的RILJ指的是RIL.java (frameworks\opt\telephony\src\java\com\And ...

最新文章

  1. OpenCV 笔记(07)— Mat 对象输出格式设置(Python 格式、CSV 格式、NumPy 格式、C 语言格式)
  2. 【Codeforces】1015B Obtaining the String(字符串 交换)
  3. Mac OS X 常用快捷键一览
  4. iOS- UITableView could not hold the selected row after reload
  5. ubuntu中使用VsCode+Eigen创建Eiegn应用程序
  6. 20165320 第十周课上测试补做
  7. C语言实现简单而通用的字典算法(附完整源码)
  8. SAP UI5 应用读取 CSRF token 的 HTTP head 请求逻辑解析
  9. 数学--数论--HDU 12151七夕节 Plus (因子和线性筛)
  10. js中的字符长度问题
  11. 微信高并发资金交易系统设计方案——百亿红包背后的技术支撑
  12. file处理的一些内容
  13. OpenGL是什么?Win10+VS2019下搭建glfw+glad开发环境
  14. python新浪微博爬虫_scrapy实现新浪微博爬虫
  15. 自学笔记----三极管
  16. Mysql 免安装配置
  17. Excel VBA单元格数据自增1
  18. CESIUM例子学习(一)——动态模型加载
  19. Shell 使用 expr 进行数学运算
  20. 有可以提醒自己上下班打卡的手机便签软件吗?

热门文章

  1. duilib写个三国杀?
  2. SANGFOR WOC初级认证——加速技术详解
  3. Ubuntu 检测不到U盘以及u盘不可用的解决
  4. linux链接库查找的优先顺序
  5. NISP和CISP信息安全相关证书有哪些?都代表什么|NISP管理中心
  6. IPguard服务器无法启动排查
  7. 联想原生系统恢复工具F11 安装方法
  8. 51单片机最小系统的相关知识
  9. 服务器centos8安装目标只显示U盘,使用U盘安装centos6.8遇到的一点问题总结
  10. 3.23-Numpy