概述
以下內(nèi)容基于android Q杨赤。
手表通話分藍(lán)牙通話、esim卡通話截汪。esim卡通話和手機(jī)通話一樣疾牲,通過(guò)modem和運(yùn)營(yíng)商基站通信。藍(lán)牙通話則是把手機(jī)上的通話信息和狀態(tài)同步到手表上挫鸽,然后把手表上的操作返回到手機(jī)上進(jìn)行實(shí)際處理说敏。
更新
android S 及之后鸥跟,Telecom 中的 BluetoothPhoneServiceImpl 中的相關(guān)功能實(shí)現(xiàn)移到了 Bluetooth app 中的 BluethoothInCallService 中丢郊。
設(shè)計(jì)結(jié)構(gòu)
藍(lán)牙通話和esim卡通話的主要區(qū)別盔沫,在于手表上的通話狀態(tài)來(lái)自藍(lán)牙而不是modem。如圖
其具體細(xì)節(jié)如下:
可以看到手機(jī)端的交互是通過(guò)IBluetoothHeadsetPhone/IBluetoothHeadset交互枫匾,而手表端的Bluetooth app實(shí)現(xiàn)了ConnectionService架诞,通過(guò)IConnectionService/IConnectionServiceAdapter交互,其和普通sim卡通話時(shí)telecom和telephony通過(guò)ConnectionService交互的區(qū)別如下:
藍(lán)牙app實(shí)現(xiàn)了telecom/Connection用來(lái)和Telecom/Call交換數(shù)據(jù)干茉。
MO
要通話谴忧,首先要有一個(gè)PhoneAccount,藍(lán)牙通話也注冊(cè)了專門屬于它的PhoneAccount角虫,如下:
這個(gè)PhoneAccount對(duì)應(yīng)的Component為HfpClientConnectionService沾谓,這樣Telecom可以區(qū)分它是藍(lán)牙通話還是sim卡通話。
手表端MO的基本流程如下:
Dialer撥號(hào)到InCall界面顯示流程和sim卡通話一致戳鹅,不同的是手表端Telecom撥號(hào)請(qǐng)求是通過(guò)HfpClientConnectionService傳給藍(lán)牙Native再傳給手機(jī)藍(lán)牙均驶,再通過(guò)手機(jī)modem撥出去。概述為
手機(jī)端收到MO命令的流程為:
通話狀態(tài)更新
因?yàn)槭直矶说耐ㄔ挔顟B(tài)是從藍(lán)牙Native獲取的枫虏,那么它是怎么更新的呢妇穴?如下:
其中最重要的是手表端queryCallsStart()到queryCallsDone(),這個(gè)流程類似sim卡通話RIL向modem發(fā)送GET_CURRENT_CALLS請(qǐng)求隶债,如下:
MT
手表端的來(lái)電狀態(tài)更新和普通Call狀態(tài)變更更新類似腾它,由手機(jī)端的telecom把信息傳給藍(lán)牙app,然后通過(guò)藍(lán)牙Native傳到手表死讹。如下:
藍(lán)牙app最后通過(guò)TelecomManager#addNewIncomingCall()通知手表端的Telecom來(lái)電瞒滴,而如果是手機(jī)端撥號(hào),則是通過(guò)TelecomManager#addNewUnknownCall()通知回俐。
當(dāng)手表端接聽(tīng)后逛腿,手機(jī)端的流程如下:
三方通話
手表三方通話實(shí)現(xiàn)的很簡(jiǎn)單,藍(lán)牙app從藍(lán)牙Native拿到了兩個(gè)不同Id的通話仅颇,創(chuàng)建兩個(gè)HfpClientConnection单默,然后傳給Telecom。如下:
會(huì)議通話
手表的會(huì)議電話實(shí)現(xiàn)也很簡(jiǎn)單忘瓦,當(dāng)HfpClientConnectionService發(fā)現(xiàn)新更新的Connection是多方通話的參與者時(shí)構(gòu)建一個(gè)HfpClientConference搁廓,它實(shí)現(xiàn)telecom/Conference,然后把它發(fā)送給Telecom耕皮。如下:
其具體實(shí)現(xiàn)如下:
Conference/Connection傳到Telecom后境蜕,其實(shí)現(xiàn)和sim卡會(huì)議電話一樣。
總結(jié)
藍(lán)牙通話其實(shí)就是在手表端的Telecom交互從Telephony變成了Bluetooth凌停。
原創(chuàng)內(nèi)容歡迎轉(zhuǎn)載粱年,但請(qǐng)注明出處,謝謝罚拟!