Android Telephony9.0 Connection 区分关系_代码库

在TelephonyFramework中 Connection有一共有两个 

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

Android Telephony9.0 Connection 区分关系_android_02

这里需要关注几个重点

  • 两个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内部匿名类对象