日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android Telephony控制通话消息下发流程

發(fā)布時間:2023/12/20 Android 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Telephony控制通话消息下发流程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?Telephony控制通話消息下發(fā)流程

通話相關(guān)代碼名稱統(tǒng)一約定及運(yùn)行進(jìn)程匯總
路徑統(tǒng)稱進(jìn)程
packages/app/DialerDialercom.android.dialer
packages/service/telecommtelecomsystem_service
packages/service/telephonyTeleServicecom.android.phone
framework/base/telecommframework無進(jìn)程只是提供調(diào)用framwork
framework/opt/Telephonytelephonysystem_service或com.android.phone

首先撥號流程和來電流程分析在前幾篇中寫道過來電流程,撥號流程。

我們在通話界面若想更改當(dāng)前通話狀態(tài),比如掛斷/接聽當(dāng)前接收來電,掛斷/保持當(dāng)前通話等操作,可以理解為是控制消息下發(fā)的過程,從Dialer——>Telecom——>TeleService——>RIL——>Modem,通話控制消息一層一層的下發(fā),最終交給Modem處理具體的通話控制。通話狀態(tài)更改完成后,在將通話狀態(tài)變更的消息一層一層的上報,最后交給Dialer應(yīng)用對通話界面進(jìn)行更新和顯示。

這里需要關(guān)注幾個重點

三個應(yīng)用的控制消息傳遞

? ? ? Dialer應(yīng)用展示的通話界面或來電界面均有控制通話狀態(tài)請求的界面控制,通過滑動或是點擊相關(guān)的控件,將觸發(fā)通話轉(zhuǎn)態(tài)控制,調(diào)用android.telecom.Call對象的hold方法,如步驟1,在步驟3的Dialer應(yīng)用中,調(diào)用IInCallAdapter的holdCall服務(wù)接口完成第一次的跨進(jìn)程服務(wù)接口調(diào)用,進(jìn)入Telecom應(yīng)用。Telecom應(yīng)用首先更新Call狀態(tài),此處的Call對象為Telecom應(yīng)用內(nèi)部定義的類com.android.service.telecom.Call,步驟8調(diào)用IConnectionService的hold服務(wù)接口,完成第二次的款進(jìn)程服務(wù)接口調(diào)用,進(jìn)入到TeleService應(yīng)用。TeleService應(yīng)用中經(jīng)過層層方法調(diào)用,由GsmCdmaCallTracker對象進(jìn)行Call的hold操作,并將請求發(fā)給RIL對象,發(fā)出對應(yīng)的RIL請求

IInCallAdapter接口匯總

IICallAdapter的Stub接口實現(xiàn)在Telecom應(yīng)用的InCallAdapter類中,他主要由answerCall,rejectCall,playDtmfTone,mergeConference等接口構(gòu)成;InCallAdapter對象則在InCallController對象綁定,IInCallService成功后創(chuàng)建。

IConnectionService接口匯總

IConnectionService的Stub接口實現(xiàn)在framework/base下的ConnectionService抽象類的匿名內(nèi)部類中,mBinder為其對象,他主要由addConnectionServiceAdapter,createConnection等創(chuàng)建TelephonyConnection接口,以及answer,reject,hold,playDtmfTone等控制通話狀態(tài)的接口構(gòu)成。而在TeleService應(yīng)用中,TelephonyConnectionService繼承了抽象類TelephonyConnection。

Android通話模型,Dialer,telecom和TeleService三個系統(tǒng)應(yīng)用主要負(fù)責(zé)的業(yè)務(wù)及運(yùn)行進(jìn)程空間,結(jié)合這四個通話的核心流程,可以抽象出模型,可以站在更高的層次去認(rèn)識和理解Android Telephony通話功能。

流程圖:

系統(tǒng)的分層?

? ? ? ?Dialer,Telecom和TeleService三大應(yīng)用可以理解為:Dialer應(yīng)用是普通的Android? App應(yīng)用,其運(yùn)行進(jìn)程的用戶信息和進(jìn)程信息,也能說明此問題;Telecom應(yīng)用運(yùn)行在system_service進(jìn)程上,其進(jìn)程用戶名為system系統(tǒng)用戶,說明他在運(yùn)行在Android Framework框架層;TeleService應(yīng)用運(yùn)行的進(jìn)程名是com.android.phone,用戶名是radio,承載著Telephony Call協(xié)議棧,同樣可以認(rèn)為他運(yùn)行在Android Framewrok框架層;最后RIL他運(yùn)行在HAL(硬件抽象層)。

交互方式

? ? ? Dialer,Telecom,TeleService和RIL都是通過服務(wù)進(jìn)行交互的,在圖中,他們之間有箭頭連接的都是通過Service跨進(jìn)程的接口調(diào)用實現(xiàn)的。Dialer與TeleService之間沒有直接的消息傳遞,要通過Telecom進(jìn)行消息中轉(zhuǎn),Telecom與RIL直接同樣沒有直接的消息傳遞,要通過TeleService進(jìn)行消息中轉(zhuǎn)。

? ? ? ?通過服務(wù)進(jìn)行跨進(jìn)程接口調(diào)用實現(xiàn)消息的傳遞,服務(wù)接口調(diào)用本身就是同步的接口調(diào)用,在Service端的實現(xiàn)將轉(zhuǎn)換為異步方式處理,待消息處理完成后,在使用回調(diào)的接口傳遞消息處理的結(jié)果

分解通話相關(guān)流程

根據(jù)消息的傳遞方向,可分成兩大類

? ? ? ? 第一類 控制通話消息下發(fā)流程 : 應(yīng)用層通過框架層向RIL發(fā)起通話管理和控制相關(guān)RIL請求,RIL轉(zhuǎn)換成對應(yīng)的消息發(fā)發(fā)送給Modem執(zhí)行,其中包括撥號,接聽電話,拒接電話,保持,恢復(fù)通話等。

? ? ? ?第二類 為通話狀態(tài)更新消息上報流程 :RIL收到的Modem的通話狀態(tài)變化通知,通過框架層向應(yīng)用層發(fā)起通話狀態(tài)變化通知,包括來電,電話接通,進(jìn)入通話中等。

總結(jié)

以上是生活随笔為你收集整理的Android Telephony控制通话消息下发流程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。