SRVCC发生后应用层的通话状态变更

2020-04-01  本文已影响0人  朱兰婷

背景

以下内容基于Android Q。

单通通话

单通通话发生SRVCC时很简单,RIL上报SRVCC状态变更的消息,并会上报CALL状态变更的消息,fw收到后断开ImsCall/ImsPhoneConnection新建DriverCall/GsmCdmaConnection并把它关联到TelephonyConnection。其流程图如下:

srvcc变更流程

整个过程TelephonyConnection、Telecom/Call、InCall/Call不会变。如下:

SRVCC后的Call变更

更多Ims通话相关内容请参考:Android IMS 通话应用设计

会议电话

和单通通话一样,会议电话发生SRVCC后RIL上报SRVCC状态变更的消息,并会上报CALL状态变更的消息,fw收到后断开ImsCall/ImsPhoneConnection新建DriverCall/GsmCdmaConnection,但不同的是新建的GsmCdmaConnection不会延用原来Ims会议电话的host TelephonyConnection,而是断开原来所有的TelephonyConnection、ImsConference、ConferenceParticipantConnection,然后新建对应的TelephonyConnection和TelephonyConference。如下:

会议电话发生SRVCC后的Call变更

可以看到因为断开又新建了TelephonyConference和它的参与者TelephonyConnection,Telecom/Call、InCall/Call也对应断开新建了。

流程图如下:

会议电话srvcc变更流程

1. 和原先ImsPhoneConnection address A相同的GsmCdmaConnection通知ImsConference的host TelephonyConnection更新original connection,ImsConference得知后发现已不是ims通话则断开原先ims会议电话的TelephonyConnection,并为其新建一个与GsmCdmaConnection address A对应的TelephonyConnection。

2. address为B的GsmCdmaConnection直接通知注册的PstnIncomingCallNotifier有新的Unknown Connection(既不是来电也不是已知去电),PstnIncomingCallNotifier从GsmCdmaConnection来出address等消息直接调用TelecomManager#addNewUnknownCall(),之后Telecom新建一个Call并通知新建一个对应的TelephonyConnection。

3. 上面2的Telecom/Call和TelephonyConnection的连接建立完成后会触发TelephonyConferenceController重新评估会议电话的状态,当发现当前所有Connection都是多方通话的参与者时会构建TelephonyConference,并通知Telecom为其新建Call。

4. 将所有TelephonyConnection加入TelephonyConference并通知Telecom它们的父子关系。

会议电话的更多内容请参考:Android 会议电话应用设计 

原创内容欢迎转载,但请注明出处,谢谢!

上一篇 下一篇

猜你喜欢

热点阅读