前言
本文代碼基于 Android T。
本文的目的是讓剛接觸這個(gè)模塊的新人對(duì)這個(gè)模塊有個(gè)整體的大概了解,能快速入手分析、解決問(wèn)題。
本文只涉及單通通話,不涉及雙通、三方通話、會(huì)議電話等。
如需查看更詳細(xì)的介紹,請(qǐng)翻閱我其它文章。
整體架構(gòu)

模塊介紹
Dialer
Dialer 負(fù)責(zé)和用戶交互的功能。

Telecom
Telecom 負(fù)責(zé)管理所有通話,包括運(yùn)營(yíng)商通話、藍(lán)牙通話。

Telephony
Telephony 負(fù)責(zé)向運(yùn)營(yíng)商網(wǎng)絡(luò)發(fā)起通話,并接收來(lái)自運(yùn)營(yíng)商網(wǎng)絡(luò)的通話。

IMS
IMS 負(fù)責(zé) IMS 通話和 IMS RCS 等功能。

IMS 架構(gòu)
由于現(xiàn)在大部分通話都是 IMS 通話,本文著重介紹 IMS 通話。

IMS 啟動(dòng)后會(huì)提供 通話、RCS 等能力,其啟動(dòng)流程如下:

簡(jiǎn)述:

通話流程
跨進(jìn)程交互

通話信息更新

RIL 信息上報(bào)
RIL 信息分為請(qǐng)求返回和自主上報(bào)


命令模式 和 觀察者模式
通話請(qǐng)求的下發(fā)和通話狀態(tài)的更新采用了命令模式和觀察者模式:


來(lái)電流程

去電流程

通話信息從 telephony.Connection 到 telecom.Connection


telecom.Connection 綁定 telephony.Connection


運(yùn)營(yíng)商通話的通話帳號(hào)注冊(cè)
不管來(lái)電還是去電,在 Telecom 中都需要用到通話帳號(hào):

視頻通話
怎么區(qū)分是視頻通話還是語(yǔ)音通話?
通過(guò) VideoState 來(lái)區(qū)分是 視頻通話 還是 語(yǔ)音通話:

如何傳遞 VideoState 及其它視頻通話操作?

顯示本機(jī)相機(jī)畫面
這個(gè)過(guò)程因?yàn)?Telecom 和 Telephony 主要做一些透?jìng)鞯墓ぷ鳎允÷浴?/p>

顯示對(duì)端相機(jī)畫面

語(yǔ)音升視頻
語(yǔ)音通話升級(jí)成視頻通話 及 視頻通話降級(jí)成語(yǔ)音通話 流程大體相同,這里只列舉一個(gè):

原創(chuàng)文章,歡迎轉(zhuǎn)載,但請(qǐng)注明出處。