android 通話程式結構總結
一
通話介面的顯示相關檔案的路徑在 /packages/apps/Dialer 路徑下。 每種介面都是以Fragment 的形式控制。
比如撥號介面DialpadFragment.java,應答介面AnswerFragment.java, Hold 介面OnHoldFragment.java.
二
下一層是/packages/services/Telecomm
這一層最重要的兩個物件CallsManager.java 和Call.java。
每一路通話生成一個Call, 在CallsManager 中儲存和管理。 同時CallsManager 註冊一些Listener, 當Call 狀態改變時, CallsManager 會發出訊息通知。
Call 物件儲存了通話相關的引數 , 然後與ConnectionServiceWrapper.java 進行對接。
ConnectionServiceWrapper 顧名思義, 是ConnectionService 的包裝類,是Call 和ConnectionService 之間的橋樑。
三 在下一層是/packages/services/Telephony/
這一層最重要的類是ConnectionService(/frameworks/base/telecomm/) 和TelephonyConnectionService(TelephonyConnection繼承了ConnectionService)
TelephonyConnectionService 為每一路通話建立一個TelephonyConnection。儲存在TelephonyConnectionService中,
TelephonyConnection 與GsmCdmaPhone 進行對接, 可以反饋到Call物件(TelephonyConnectionListener)
四
在下一層到達/frameworks/opt/telephony
這一層最重要的類是 GsmCdmaCallTracker.java, GsmCdmaCallTracker 控制的是 GsmCdmaConnection 物件。
每一路通話對應一個GsmCdmaConnection 物件, 儲存在 GsmCdmaConnection mConnections[] 陣列中。
GsmCdmaCallTracker 還儲存三個GsmCdmaCall,mRingingCall,mForegroundCall,mBackgroundCall 記錄通話狀態。