GsmCall,通话,是指通信双方(自己和别人)的通信的过程,一个通话可以有多个通话连接,一个通话连接只能属于一个通话,比如正在等待的通话,正在接通的通话,正在转接的通话等,每一个通话都有自己的状态。
DriverCall ,描述来电信息,如号码,状态等信息,就是AT+CLCC
GsmConnection 就是一路通话连接,有两种类型
<1>接收型。接的电话,MT call,需要DriverCall 作为参数
<2>发出型。播出的电话,MO call,需要拨出的号码作为参数
<3>GsmConnection 从属于一个GSMCall,持有一个 GsmCall 对象。
GsmCallTracker
<1>GsmCallTracker 本质上是一个 Handler,持有一个Phone对象,在GsmPhone 的构造函数中初始化,管理Phone对象的通话过程,是通话管理的核心类,将rild有关通话的信息传递给CallManager,同时从CallManager 中获取信息传递给rild.
<2>GsmCallTracker 管理着多个GsmCall,ringingCall,foregroundCall backgroundCall.在GsmCallTracker 最多维护7条GsmConnection.每一个GsmCall最多维持5条GsmConnection.
<3>GsmCallTracker 持有很多register对象,用于回调RIL.java 中的notify 事件,事实上在GsmPhone,CallManager,CallNotifier 都持有register对象,目的就是为了响应其他对象的notify 事件,这种模式用于逐步将事件由底层传递到上层。
<4>GsmCallTracker 定义了拨号方法(dial),创建pendingMO对象(去电对象),调用RIL.java 的拨号方法,将拨号请求发送到rild.返回 pendingMO 对象。
<5>GsmCallTracker 定义了handlePollCalls 方法,来管理多个来电连接(GSMConnection).
Phone.state 和 Call.state
<1>Phone.state 是指从用户的角度来讲,电话的状态,只有三种, IDLE, RINGING, OFFHOOK。IDLE,是指没有通话活动,RINGING,是指只一个电话正在响铃或者呼叫等待。OFFHOOk,是指至少有一个通话处于接通状态或者等待状态或者拨出状态。
<2>Call.state,是指通话的状态
static State
stateFromDCState (DriverCall.State dcState) {
switch (dcState) {
case ACTIVE: return State.ACTIVE;
case HOLDING: return State.HOLDING;
case DIALING: return State.DIALING;// only MO
case ALERTING: return State.ALERTING;// only MO
case INCOMING: return State.INCOMING; //only MT
case WAITING: return State.WAITING; //only MT
default: throw new RuntimeException ("illegal call state:" + dcState);
}
}
<3>GsmConnection 的状态都会回调到parent的状态,即GsmCall 的状态。
<4>也就是说Phone.state 是Call.state 的组合形式。
CallManager
<1>PhoneApp 通过CallManager 来发送和接收有关通话的信息,也就是说 PhoneApp 通过CallManager 来和GsmCallTracker来进行数据交互。
DriverCall ,描述来电信息,如号码,状态等信息,就是AT+CLCC
GsmConnection 就是一路通话连接,有两种类型
<1>接收型。接的电话,MT call,需要DriverCall 作为参数
<2>发出型。播出的电话,MO call,需要拨出的号码作为参数
<3>GsmConnection 从属于一个GSMCall,持有一个 GsmCall 对象。
GsmCallTracker
<1>GsmCallTracker 本质上是一个 Handler,持有一个Phone对象,在GsmPhone 的构造函数中初始化,管理Phone对象的通话过程,是通话管理的核心类,将rild有关通话的信息传递给CallManager,同时从CallManager 中获取信息传递给rild.
<2>GsmCallTracker 管理着多个GsmCall,ringingCall,foregroundCall backgroundCall.在GsmCallTracker 最多维护7条GsmConnection.每一个GsmCall最多维持5条GsmConnection.
<3>GsmCallTracker 持有很多register对象,用于回调RIL.java 中的notify 事件,事实上在GsmPhone,CallManager,CallNotifier 都持有register对象,目的就是为了响应其他对象的notify 事件,这种模式用于逐步将事件由底层传递到上层。
<4>GsmCallTracker 定义了拨号方法(dial),创建pendingMO对象(去电对象),调用RIL.java 的拨号方法,将拨号请求发送到rild.返回 pendingMO 对象。
<5>GsmCallTracker 定义了handlePollCalls 方法,来管理多个来电连接(GSMConnection).
Phone.state 和 Call.state
<1>Phone.state 是指从用户的角度来讲,电话的状态,只有三种, IDLE, RINGING, OFFHOOK。IDLE,是指没有通话活动,RINGING,是指只一个电话正在响铃或者呼叫等待。OFFHOOk,是指至少有一个通话处于接通状态或者等待状态或者拨出状态。
<2>Call.state,是指通话的状态
static State
stateFromDCState (DriverCall.State dcState) {
switch (dcState) {
case ACTIVE: return State.ACTIVE;
case HOLDING: return State.HOLDING;
case DIALING: return State.DIALING;// only MO
case ALERTING: return State.ALERTING;// only MO
case INCOMING: return State.INCOMING; //only MT
case WAITING: return State.WAITING; //only MT
default: throw new RuntimeException ("illegal call state:" + dcState);
}
}
<3>GsmConnection 的状态都会回调到parent的状态,即GsmCall 的状态。
<4>也就是说Phone.state 是Call.state 的组合形式。
CallManager
<1>PhoneApp 通过CallManager 来发送和接收有关通话的信息,也就是说 PhoneApp 通过CallManager 来和GsmCallTracker来进行数据交互。