Telephony Call

1、Telephony 架构

        Telephony整体架构和Android架构一样的,包括APP层,框架层,HAL层,内核层。        

        其中HAL层不同平台实现方式不同,其中MTK SPRD 平台使用AT通道的方式实现,高通使用QMI方式实现。

       

2、通话业务介绍 

        APP包括Dialer.apk、TeleService.apk、Telecom.apk。其中Dialer.apk跑在com.android.dialer进程中,TeleService.apk跑在常驻进程com.android.phone进程中,Telecom.apk跑在system进程中。框架包括包括 telephony fw、telecom fw。Code分别位于frameworks/opt/telephony、frameworks/base/telecomm。

        Android 5.0是 只有Dialer和TeleService 这个两个APP。Google为了解除通话app和系统框架的耦合,Android 6.0新增了Telecom apk。并提供系统接口设置默认的通话APP。具体逻辑在Telecom.apk中。

2.1、Telecom的启动过程

       虽然 Telecom app设置了android:directBootAware="true",提前启动属性。

       但是将telecom service注册并拉起,并不是AMS执行Telecom app所执行的,而是在开机时框架执行的,具体流程如下。

 相关开机Log打印如下

2.2、TeleService的启动过程

      TeleService一般也称为phone进程, phone进程设置了android:directBootAware="true",系统启动完成后,会将phone进程拉起。

      phone进程的启动过程大致如下,android版本不同,细节处还有所差异。

相关启动Log如下

2.3、RILD的启动 

      不同平台,RILD启动不一样,需要参考不同平台代码,如有兴趣,可以参考此案例分析过程。

MTK RILD 无法启动问题分析_mtkrilj-CSDN博客

3、去电流程

其中,蓝色表示普通CS通话,红色表示VOLTE通话

3.1、Dialer->Telecom

        通话流程比较复杂,Dialer调用TelecomService服务的placeCall来进行通话。

        Telecom app 中CallsManager会执行startOutgoingCall 主要建立通话Call对象,实现Dialer和Telecom双向Binder通信。 其bind详细流程如下。

        Telecom 保存了Dialer的IInCallService 对象用于通知通话状态,而Dialer则保存了Telecom的的IInCallAdapter对象用于操作通话,如暂停挂断,DTMF等,实现两个进程间双向通信。

3.2、Telecom->Telephony->Framework

        placeOutgoingCall主要建立通话Call对应框架Connection,实现Telecom和TeleService双向Binder通信。

3.3、 Framwork->IMS

        framework中创建ImsCall对象,与IMS apk中的ImsCallSessionProxy进行双向通信,ImsCall中保存 IMS apk中的ImsCallSession对象,ImsCallSessionProxy中保存ImsCallSessionListener进行双向通信,其具体类图如下。

3.4、相关Log如下

4、来电流程

其中,蓝色表示普通CS通话,红色表示VOLTE通话

4.1、IMS->Framwork

4.2、Telephony->Telecom->InCallUI

4.3、相关Log如下

5、三方通话和电话会议

5.1、三方通话

        通话支持一路Active状态,一路Hold状态。用户可以在两路通话之间进行切换。

//Dialer三方
12-28 15:27:58.334 I/DialerCallList(21480): com.android.incallui.call.CallList.onUpdateCall:845 [DialerCall_6, ONHOLD, [Capabilities: CAPABILITY_SUPPORT_HOLD CAPABILITY_MUTE CAPABILITY_SUPPORTS_VT_REMOTE_RX CAPABILITY_SUPPORTS_VT_REMOTE_TX CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL], [Properties:], children:[], parent:null, conferenceable:[Call [id: TC@12, state: ACTIVE, details: [i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值