1.Call:Call有九种状态:IDLE,ACTIVE,HOLDING,DIALING,ALERTING,INCOMING,WAITING,DISCONNECTED,DISCONNECTING;
2.Connection:
a.CdmaConnection (Context context, DriverCall dc, CdmaCallTracker ct, int index)
这个构造方法是在MT的时候使用的。因为它有一个DriverCall的参数。它通过parentFromDCState方法来获得对应的parent(call),把connection加入到call的connections变量进行管理。
b.CdmaConnection(Context context, String dialString, CdmaCallTracker ct, CdmaCall parent) 这个构造方法是在MO的时候使用的,它会传入一个指定的parent(call)且通过parentattachFake(),调用把Connection加入到call的connections变量进行管理。
3.DriverCall
是与ril层通信时的一个中间处理类,主要用来接收ril的call数据后转到java层上来。
4.CallTracker
a.首先着重理解ringingCall,foregroundCall,backgroundCall的含义。
在CdmaConnection.java中可以看到
private CdmaCall
parentFromDCState (DriverCall.State state) {
switch (state) {
case ACTIVE:
case DIALING:
case ALERTING:
return owner.foregroundCall;
//break;
case HOLDING:
return owner.backgroundCall;
//break;
case INCOMING:
case WAITING:
return owner.ringingCall;
//break;
default:
throw new RuntimeException("illegal call state: " + state);
}
}
ringingCall:用来管理INCOMING和WAITING的通话
foregroundCall:用来管理DAILING、ALERTING、ACTIVE的通话
backgroundCall:用来管理HOLD的通话
b.CdmaCallTracker的事件处理机制
CdmaCallTracker.java,以dial为例,过程如下:
RIL_REQUEST_DIAL:pendingOperations++,needsPoll=true
EVENT_OPERATION_COMPLETE:pendingOperations--
RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED:如果call state有变化
RIL_REQUEST_GET_CURRENT_CALLS:
EVENT_POLL_CALLS_RESULT:if(msg == lastRelevantPoll)...
事件涉及到三个变量。
pendingOperations:这个变量时在发生请求的时候会++,在处理应答的时候会--。
needsPoll:该变量是用来配合pendingOperations处理是否需要从RIL获取当前calls列表,并更新connections列表。
lastRelevantPoll:在发送RIL_REQUEST_GET_CURRENT_CALLS的时候记录最近一次请求的message,在response的时候只对最近一次请求的response做出相应,更新connections列表。
上面三个变量主要是用来判断是否需要发送RIL_REQUEST_GET_CURRENT_CALLS请求来获得当前calls列表,并更新connections列表。
handlePollCalls()函数中。
if (conn == null && dc != null){
//conn为null,说明CallTracker中是没有对应的call的。这只有两种情况可以发生。MO的dialing///状态和MT的incoming/waiting状态。打电话和来电的时候会执行到此处。
}else if(conn != null && dc == null){
//说明在底层已经挂掉了。callTracker需要drop该connection,对方挂断电话的时候会执行到此处
}else if(conn != null && dc != null){
//
}
if (newRinging != null) {
//表示是一个MT call,需要通知用户。
phone.notifyNewRingingConnection(newRinging);
}
分享到:
相关推荐
以一个网站的基本功能演示了ics的httpcli使用方法。
最新版的ics支持d7-xe10.1,还支持OpenSSL-Win32 主要控件请见OverbyteIcsReg.pas uses {$IFDEF FMX} FMX.Types, Ics.Fmx.OverbyteIcsWndControl, Ics.Fmx.OverbyteIcsWSocket, Ics.Fmx.OverbyteIcsDnsQuery, ...
讲xlsx文件的课表,转成ics格式,然后就可以批量的将课表添加到日历中。以实现对生活更有逻辑的管理
ICS delphi 通信组建,特别是FTP易用稳定。
ICS Triplex公司Trusted容错三重化冗余可编程控制...迄今为止,全世界已经有超过3000套ICS Triplex的系统广泛应用于航空航天、石油和天然气加工、精细化工、海上石油开采、大型电站、大型锅炉管理和压缩机控制等领域。
已经解决所有编译遇到的坑 直接编译引用就可用 ics 2010 OverbyteIcsV7.zip ICS很有名!
中国农历 ics 文件 1941-2050 全。 文件
ics delphi 组件ics delphi 组件ics delphi 组件
ICS - Internet Component Suite <br>ICS是为构建客户端/服务器和因特网应用的组建集.它支持所有主要的TCP/IP协议,例如TCP,UDP,SMTP,POP3,NNTP,HTTP, PING,TELNET,FINGER等. ICS兼容所有Delphi和C++Builder版本...
ICS lab10 WebProxy 包含 proxy.c
ICS954309笔记本电脑主板时钟芯片详细引脚功能以及应用电路资料
delphi ics中的Demo例子,很丰富。
该日历资源用github的代码爬自香港天文台,包含了中国农历ics文件2000年-2100年间100年的全部农历日历,带二十四节气(不需要这么长时间的可以再文本编辑器打开删除即可)。 直接生成的数据仅每月初一带月份,其余...
ics component 8 xe4 ics component 8 xe4
xiaomi-corporation-xiaomi-2020-annual-results-investor-conference-call-and-audio-webcast.ics.html
ics_ftpclient 创建文件路径
日历2021.ics
ICS控件及demo,ICS控件及demo,ICS控件及demo,Delphi代码
【分享】利用批处理自动开启internet连接共享(ICS)。可以指定网卡,开启或关闭。
自己改了多处条码编译指令,让其兼容最新的D10.2, non blocking的socket组件 ICS最适合不过了.