前言
本文代码基于 Android T。
本文的目的是让刚接触这个模块的新人对这个模块有个整体的大概了解,能快速入手分析、解决问题。
本文只涉及单通通话,不涉及双通、三方通话、会议电话等。
如需查看更详细的介绍,请翻阅我其它文章。
整体架构
模块介绍
Dialer
Dialer 负责和用户交互的功能。
Telecom
Telecom 负责管理所有通话,包括运营商通话、蓝牙通话。
Telephony
Telephony 负责向运营商网络发起通话,并接收来自运营商网络的通话。
IMS
IMS 负责 IMS 通话和 IMS RCS 等功能。
IMS 架构
由于现在大部分通话都是 IMS 通话,本文着重介绍 IMS 通话。
IMS 启动后会提供 通话、RCS 等能力,其启动流程如下:
简述:
通话流程
跨进程交互
通话信息更新
RIL 信息上报
RIL 信息分为请求返回和自主上报
命令模式 和 观察者模式
通话请求的下发和通话状态的更新采用了命令模式和观察者模式:
来电流程
去电流程
通话信息从 telephony.Connection 到 telecom.Connection
telecom.Connection 绑定 telephony.Connection
运营商通话的通话帐号注册
不管来电还是去电,在 Telecom 中都需要用到通话帐号:
视频通话
怎么区分是视频通话还是语音通话?
通过 VideoState 来区分是 视频通话 还是 语音通话:
如何传递 VideoState 及其它视频通话操作?
显示本机相机画面
这个过程因为 Telecom 和 Telephony 主要做一些透传的工作,所以省略。
显示对端相机画面
语音升视频
语音通话升级成视频通话 及 视频通话降级成语音通话 流程大体相同,这里只列举一个:
原创文章,欢迎转载,但请注明出处。