本文代码以MTK平台Android 4.4为分析对象,与Google原生AOSP有些许差异,请读者知悉。
本文分析的是单个通话情况下,多方通话流程会略有不同。下图为简要时序图:
想说点啥,可感觉上图已经描述的挺清楚了,懒得浪费笔墨(懒人的借口),需要注意的是图中数字序号并不是绝对按时间排序的,另外:
39.mCallLogger.logCall() ————— 通话记录存储
38.onVoiceCallEnded ————— 数据连接处理
40.mPhone.notifyPhoneStateChanged() ————-通话状态变化(注:这个主要是用来对外的,第三方app通过TelephonyManager来获取通话状态)
留待之后分析。
上图主要说的是本地挂断的流程,connection连接断开的原因为Connection.DisconnectCause.LOCAL,如果是远端挂断(即对方挂断),则没有RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND这一请求过程,而是在流程之后,handleCallProgressInfo中请求通话断开的原因EVENT_GET_LAST_CALL_FAIL_CAUSE(即RIL_REQUEST_LAST_CALL_FAIL_CAUSE),会返回原因Connection.DisconnectCause.NORMAL。
右键复制图片地址,在浏览器中打开即可查看大图。
未完待续,有不对的地方,请指正。
版权声明:本文为博主原创文章,未经博主允许不得转载。
,于千万年之中,于千万人之中,在时间无涯的荒野中,