前言
本文代碼基于 Android T。
本文的目的是讓剛接觸這個模塊的新人對這個模塊有個整體的大概了解,能快速入手分析、解決問題。
本文只涉及單通通話,不涉及雙通、三方通話、會議電話等。
如需查看更詳細的介紹,請翻閱我其它文章。
整體架構
整體架構
模塊介紹
Dialer
Dialer 負責和用戶交互的功能。
Dialer 模塊主要功能
Telecom
Telecom 負責管理所有通話,包括運營商通話、藍牙通話。
Telecom 模塊功能介紹
Telephony
Telephony 負責向運營商網絡發起通話,并接收來自運營商網絡的通話。
Telephony 模塊主要功能
IMS
IMS 負責 IMS 通話和 IMS RCS 等功能。
IMS 模塊功能介紹
IMS 架構
由于現在大部分通話都是 IMS 通話,本文著重介紹 IMS 通話。
Ims 結構層級
IMS 啟動后會提供 通話、RCS 等能力,其啟動流程如下:
Android 官網:imsservice-sequence
簡述:
ims service結構
通話流程
跨進程交互
跨進程交互
通話信息更新
通話信息變更
RIL 信息上報
RIL 信息分為請求返回和自主上報
Android 官方:RIL_Solicited
Android 官方:RIL_Unsolicited
命令模式 和 觀察者模式
通話請求的下發和通話狀態的更新采用了命令模式和觀察者模式:
命令模式
觀察者模式
來電流程
來電流程
去電流程
撥號流程
通話信息從 telephony.Connection 到 telecom.Connection
IMS 通話
CS 通話
telecom.Connection 綁定 telephony.Connection
來電
去電
運營商通話的通話帳號注冊
不管來電還是去電,在 Telecom 中都需要用到通話帳號:
PhoneAccount 注冊
視頻通話
怎么區分是視頻通話還是語音通話?
通過 VideoState 來區分是 視頻通話 還是 語音通話:
video 狀態上報和下發
如何傳遞 VideoState 及其它視頻通話操作?
video 信息的進程交互
顯示本機相機畫面
這個過程因為 Telecom 和 Telephony 主要做一些透傳的工作,所以省略。
視頻通話顯示本機相機畫面
顯示對端相機畫面
視頻通話顯示對端相機畫面
語音升視頻
語音通話升級成視頻通話 及 視頻通話降級成語音通話 流程大體相同,這里只列舉一個:
語音升視頻
原創文章,歡迎轉載,但請注明出處。