Android Telephony9.0 Connection 區分關係

在TelephonyFramework中 Connection有一共有兩個 

  1. android.telecom.Connection                              framewrok/base/telecomm
  2. com.android.internal.telephony.Connection       framewrok/opt/telephony

 

 

 

這裏需要關注幾個重點

  • 兩個Connection抽象
    兩個Connection抽象類對應的代碼分別在framework/base/telecom和framework/opt/telephony代碼庫中。區分包名
  • android.telecom.Connection
    android.telecom.Connection的子類代碼在TeleService代碼庫中,有TelephonyConnection抽象類GsmConnection和CdmaConnection作爲TelephonyConnection的抽象的子類
  • com.android.internal.telephony.Connection
    com.android.internal.telephony.Connection的子類代碼在framewrok/opt/telephony代碼庫中,僅有一個子類就是GsmCdmaConnection
  • 運行空間
    GsmConnection,CdmaConnection和GsmCdmaConnection對象全部是運行在com.android.phone進程中
  • 兩個Connection的關係
    TelephonyConnection對象的mOrginalConnection屬性是GsmCdmaConnection對象的應用,在創建此對象時便建立起來了依賴關係;GsmCdmaConnection對象的mListenrs列表中,保存着TelephonyConnection內部匿名類對象,mOriginalConnectionListener,他重寫了com.android.internal.telephony.Connection.ListenerBase類的方法
  • 消息流轉
    TelephonConnection通過mOrginalConnection屬性訪問Telephon Voice Call 語音通話模型中的屬性和方法

重點:

GsmCdmaConnection通過mListers列表,調用其Listener接口,從而訪問TelephonyConnecton主類的方法,傳遞通話變化的相關信息。我這裏就不做代碼處理了

 

 

這裏來講解一下兩個通道處理

TelephonyConnection對象接收通話變化消息有兩個通道:

  1. GsmCdmaPhone對象的RegistrantList消息回調 (setOriginalConnection 方法調用時註冊Handle消息)
  2. GsmCdmaConnection對象的mListeners接口調用 (setOriginalConnection 方法調用時添加進入GsmCdmaConnection中mOriginalConnection.addListener(mOriginalConnectionListener);)

兩個通道接收到的通話變化消息,最後都是通過TelephonyConnection的mListener消息調用進行傳遞的。TelephonyConnection mListeners保存着android.telecom.Connection.Listener對象,他有8個子類,其中最關鍵的是ConnectionService和TelephonyConferenceController類的mConnectionListener內部匿名類對象

 

發佈了245 篇原創文章 · 獲贊 645 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章