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

首先拨号流程和来电流程分析在前几篇中写道过来电流程,拨号流程。

拨号成功后,对方接听了此路通话,那么通话界面将更新当前通话中的通话状态,并开始通话计时,可以理解为:Modem——>RIL——>TeleService——>Telecom——>Dialer,一层一层上报通话状态为,“通话中....”,的消息处理和发送过程.

流程图:

这里需要关注几个重点

三个应用的Call信息传递

TeleService应用首先接收到通话状态更新的消息,通过framework/Telecom(framewrok)的Adapter服务设置不同的状态(步骤11(传入的是Id));接着service/Telecom(telecom)应用跟更新Call状态(步骤13,步骤14);最后Telecom掉了用IInCallSerivce的updateCall接口更新Call状态

RegistrantList消息处理

步骤2步骤3,在GsmCdmaPhone对象发出RegistranList消息通知后,在TelephonyConnection对象的mHandler匿名内部类对象的handlerMessage中响应MSG_PRECISE_CALL_STATE_CHANGED类型的Handler消息,该Handler消息的注册入口在TelephonyConnection抽象类的两个子类GsmConnectionh和CdmaConnection的setOriginalConnection方法中实现注册MSG_PRECISE_CALL_STATE_CHANGED类型的Registran,并在GsmConnection的构造方法中调用setOriginalConnection接口进行消息注册的初始化操作;而TelephonyConnection对象在TelephonyConnectionService类的onCreateOutgingConnection和onCreateIncommingConnection方法中创建。

TelephonyConnection对象的Listener注册

步骤10:通过Listener对象的onStateChanged进行消息回调,那么Listener对象是什么?有是在什么地方注册的?是在ConnectionService的createConnection方法中,首先创建TelephonyConnection对象,然后调用addConnection方法,设置当前类的私有内部类Connection.Listener对象mConnectionListener为TelephonyConnection对象的Listener

IConnectionServiceAdapter接口汇总

IConnectionServiceAdapterd的Stub接口实现在Telecom应用ConnectionServiceWrapper类的私有内部类Adapter中,它主要由setActive,setRinging,setAudioRoute等设置Call相关状态信息的接口,以及onConnectionEvent,onRttInitiationSuccess,onRemoteRttRequest等消息通知接口构成

IInCallService接口汇总

IICallSerivce的Stub接口实现了framework/base下的InCallService抽象类的私有内部类InCallServiceBinder中,他主要由setInCallAdapter,addCall,updateCall等增加和更新Call对象相关的接口,以及onConnectionEvent,onCallAudioStateChanged等消息通知接口。而在Dialer应用中,InCallServiceImpl继承了抽象类InCallService

Android通话模型,Dialer,Telepcom和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 p wifi一直在扫描_(一百六十八)Android P wifi 扫描失败结果上报流程梳理-扫描上报梳理②...

    接(一百五十五)Android P wifi 扫描失败结果上报流程梳理-扫描上报梳理 扫描失败上报梳理发现梳理的差了很多,特补充 1.WificondScannerImpl @Override pub ...

  2. Android Telephony控制通话消息下发流程

    Telephony控制通话消息下发流程 通话相关代码名称统一约定及运行进程汇总 路径 统称 进程 packages/app/Dialer Dialer com.android.dialer packa ...

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

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

  4. Kubernetes Kubelet 状态更新机制

    Kubernetes Kubelet 状态更新机制 tags: kubelet 文章目录 Kubernetes Kubelet 状态更新机制 1. 概览 2. 配置 2.1 社区默认的配置 2.2 快 ...

  5. android 控件回执流程,Android telephony MMS 学习笔记

    本文主要从以下几个方面来学习MMS在android系统中的处理: (1)MMS初始化. (2)MMS发送. (3)MMS接收(包括push MMS接收和从MMSC中提取MMS内容). (4)MMS存储 ...

  6. android 通话状态监听(自定义接听挂断按钮与通话界面,根据公司的业务逻辑可以实现自己的来电秀功能)...

    前言: 因为公司需求,要自定义一款来电秀的app当做周边产品来配合主营的app业务. 之前因为赶项目,没时间整理这块,现在项目告一段落了,现在回头看看感觉这个功能还是挺有意思的,比较有针对性.电话呼入 ...

  7. android 解决通话录音时无法返回挂断状态的bug

    据了解,安卓6.0开始不再支持通话录音,除非修改系统.系统放开权限.root,这也可以理解,毕竟这涉及到隐私问题,万一我一个亿的银行密码被人窃听了呢? 最近有个定制的系统有个需求--------通话录 ...

  8. android监听通话状态

    samsung提审结果报告里: application sound is audible during the call in pop up window //在弹出窗口中的呼叫期间,<缺陷&g ...

  9. android物理按键输入法,Android输入法框架中按键消息的处理流程

    最近研究了一下Android输入法,发现Android输入法框架中按键消息的处理流程和一般应用程序的处理流程有很大的不同,故在此做个总结. 一.一些名词缩写 IMF(Input MethodFrame ...

最新文章

  1. NSwagStudio for Swagger Api
  2. golang make()内置函数
  3. Linux-使用 Find 命令找到那些需要清理的文件
  4. GPS 气压计高度测量
  5. osqa java_从LSM-Tree、COLA-Tree谈到StackOverflow、OSQA(召唤前端)
  6. 解决研发管理问题的途径
  7. UE4学习-第三人称游戏的AI巡逻
  8. 阿里淘宝天猫单点登录项目实战(附源码)
  9. Vhost and VIOMMU
  10. c语言经典程序100例50行以上,C语言非常简单的字符统计程序50行
  11. c++fabs函数_支持向量机(SVM)模型python复现 - SMO算法;核技巧;高斯核函数
  12. od的简单使用--(1)
  13. RxJava:concat(连接)、 concatDelayError、 concatEager的使用
  14. 关于使用UE编辑器无法初始化ftp的问题
  15. python lime_本地可解释模型不可知的解释– LIME in Python
  16. 【JZOJ 4623】搬运干草捆
  17. html5星空效果图,HTML5 canvas炫酷星空背景特效
  18. 李航统计学习方法笔记——泛化误差上界
  19. 安卓蓝牙开发(1)BLE蓝牙基础知识和一般开发流程
  20. cmd执行bat结果不回显_批处理中屏蔽错误信息 nul 2nul 的用法 (cmdnul空格2nul)

热门文章

  1. iPad Pro如何当外置显示器(win、mac)
  2. 会员权益体系内容设计维度
  3. 【今日头条2019,笔试题】机器人跳跃问题
  4. 一个学习式的mogoLink框架介绍
  5. 网页功能升华必备播放器
  6. 输入密码三次,简单程序
  7. Pr中有音频轨道,但是播放不了声音
  8. 哪款骨传导耳机好用,好用的骨传导耳机汇总
  9. 242. 有效的字母异位词 349. 两个数组的交集
  10. gnuplot画图点线设置