第二章:CallsManager调用 startOutgoingCall开始拨号流程之一CallsManager完成每路电话的控制管理

来源:互联网 发布:sql 新建存储过程 编辑:程序博客网 时间:2024/06/14 02:29

一.CallsManager完成每路电话的控制管理

概述:上面我们介绍了两路通话流程,在这里我们先介绍第一路进程,就是拨号显示通话界面过程,前面介绍了拨号界面如何到达CallsManager这一层,在这里我们将继续分析下去,看看除了去做显示界面的动作还做了哪些事情,其实,这一路进程说是做了显示通话界面的动作,确切的说应该是去做了每路通话的逻辑处理,状态保存以及激活整个通话架构的动作,而显示通话界面只是个最终的结果而已,中间做的事情远远比显示界面要复杂而且重要的多,我们知道,拨号打电话过程是需要很多类来辅助完成的,而在系统中如何管理每路通话显得尤为重要,在这个过程中首先我要说一点,我们的系统最多支持三路通话:foregroupcall、backgroupcall、ringingcall,即第一路通话,第二路通话,来电通话,而通话连接最多支持7个连接,接下来我们具体分析这个CallsManager调用 startOutgoingCall之后做了哪些事情。

 

1).上面我们介绍了从拨号盘开始的拨号过程,直到CallsManager我们介绍了是怎么去调用显示通话界面的,在这中间其实是做了很多逻辑的处理,我们一一分析,在这里我们就不从头开始分析了,我们从CallsManager调用 startOutgoingCall方法中开始分析。

 

2). CallsManager.java中,进入startOutgoingCall方法,在这里构造了一个Call类的实例,这个Call是packages/services/Telecomm模块下的Call.java类,不过在这里:call.setExtras(extras),对传递进来的 clientExtras进行了一次保存,所以这个call可以暂时不用管,继续在最后调用addCall(call)方法;

进入addCall()方法,在这里,对call进行了保存,保存在一个列表mCalls 中,以待后用,继续:

 private void addCall(Call call) {

        Log.v(this,"addCall(%s)", call);

        call.addListener(this);

        mCalls.add(call);

        // TODO: UpdatemForegroundCall prior to invoking

        // onCallAdded for callswhich immediately take the foreground (like the first call).

        for (CallsManagerListenerlistener : mListeners) {

           listener.onCallAdded(call);

        }

        updateCallsManagerState();

    }

这里 listener是CallsManagerListener类型的,是从mListeners列表中遍历出来的,构造方法中mListeners.add(mInCallController),这个 mInCallController是InCallController类型的,InCallController最终继承了CallsManagerListener,也就是说listener.onCallAdded(call)最终调用了InCallController中实现的 onCallAdded方法来保存call实例。


0 0
原创粉丝点击