Call(通话)相关的内容也是属于Telephony模块,Call整体上可以分成两类:
1. CS call,其中CS全称是Circuit Switch,我们平常打电话走的就是CS的流程。
2. IMS PS call,其中PS全称是Packet Switch,走IMS流程的Call有4类,分别是VoLTE(voice over LTE),ViLTE(video over LTE),VoWiFi(voice over wifi),ViWiFi(video over wifi)。
在分析具体的MT(Mobile Termination Call 被叫)/MO(Mobile Origination Call 主叫)流程之前,需要了解更多Call相关的基础知识,日后才可以更好地理解各种通话的流程。
而本文要讲解的就是Call.java对象。在Android源码中一共有5个“Call.java”文件,所以理清它们之间的联系以及学会如何分辨不同的Call对象,这也是分析通话流程的前提之一。
我们需要重点关注的有4个:
1. /packages/apps/Dialer/InCallUI/src/com/android/incallui/Call.java
2. /packages/services/Telecomm/src/com/android/server/telecom/Call.java
3. /frameworks/base/telecomm/java/android/telecom/Call.java
4. /frameworks/opt/telephony/src/java/com/android/internal/telephony/Call.java
Telephony Phone架构可以细分成Dialer(InCallUI),Telecomm Framework,Telecomm Service,Telephony Service,Telephony Framework这5个模块,除了Telephony Service,其他4个模块都有一个自己的Call.java,可想而知,整个通话的过程都会伴随着对Call对象的处理。
一、Dialer(InCallUI)中的Call
在Android N中,InCallUI已经被放置到Dialer目录之下,也许是为了更好地提醒开发者,要编译InCallUI的话,直接编译Dialer就行了。
对于InCallUI Call,
/packages/apps/Dialer/InCallUI/src/com/android/incallui/Call.java
从它的构造方法来看,InCallUI Call是直接依赖Telecom Call(Telecom Framework中的Call)的
public Call(android.te