Android 5.0 呼叫流程--呼入

原创 2015年04月22日 21:17:51

 

1.1         MT call

我们先给出MT起呼过程的示例流程图,然后结合该图做代码流程的分析:

普通来电的流程,从RIL层开始,其流程如下,

 

 

 

 

 

具体的流程分析就不做文字阐述了,对着流程图看代码即可。

 

需要注意的是要有Telephony的框架意识和通信链路的相互关联关系,这些在其他文章里有讲述。

 

 

下面是一些简单的笔记摘要

1.1.1   来电提示(IncallUI

 

5.3.3.1.     通用部分: telecomm到应用

   

在应用部分,在CallList里,当Phone.ListeneronCallAdded被调用时,根据来电状态Call.State.INCOMING,调用CallList. onIncoming(),它会把这个事件发送给向CallList注册的监听器listener.onIncomingCall(call)

CallButtonPresenter.java (cp_incallui_5.0\src\com\android\incallui):        InCallPresenter.getInstance().addListener(this);

CallCardPresenter.java (cp_incallui_5.0\src\com\android\incallui):        InCallPresenter.getInstance().addListener(this);

ConferenceManagerPresenter.java (cp_incallui_5.0\src\com\android\incallui):        InCallPresenter.getInstance().addListener(this);

DialpadPresenter.java (cp_incallui_5.0\src\com\android\incallui):        InCallPresenter.getInstance().addListener(this);

VideoCallPresenter.java (cp_incallui_5.0\src\com\android\incallui):        InCallPresenter.getInstance().addListener(this);         

 

InCallPresenter.java里,onIncomingCall被调用,它再调用监听器的onIncomingCall

    public void onIncomingCall(Call call) {

        InCallState newState = startOrFinishUi(InCallState.INCOMING);

        InCallState oldState = mInCallState;

 

        Log.i(this, "Phone switching state: " + oldState + " -> " + newState);

        mInCallState = newState;

 

        for (IncomingCallListener listener : mIncomingCallListeners) {

            listener.onIncomingCall(oldState, mInCallState, call);

        }

 

        if (CallList.getInstance().isDsdaEnabled() && (mInCallActivity != null)) {

            mInCallActivity.updateDsdaTab();

        }

    }         

向它注册的监听器存放在mIncomingCallListeners里,注册过程在每个应用里,使用addIncomingCallListener方法进行注册:

CallButtonPresenter.java (packages\apps\incallui\src\com\android\incallui):        InCallPresenter.getInstance().addIncomingCallListener(this);

CallCardPresenter.java (packages\apps\incallui\src\com\android\incallui):        InCallPresenter.getInstance().addIncomingCallListener(this);

VideoCallPresenter.java (packages\apps\incallui\src\com\android\incallui):        InCallPresenter.getInstance().addIncomingCallListener(this);         

 

 

5.3.3.2.     视频来电

   

VideoCallPresenter是它的一个监听器,之后在自己的onIncomingCall里调用onStateChange,之后会调用enterVideoMode进入视频模式,

enterVideoMode里面有几个重要工作,包括对surface的设置和camera的处理,

    private void enterVideoMode(int newVideoState) {

 

        ui.showVideoUi(true);

 

               enableCamera(isCameraRequired);

 

            if (ui.isDisplayVideoSurfaceCreated()) {

                Log.d(this, "Calling setDisplaySurface with " + ui.getDisplayVideoSurface());

                mVideoCall.setDisplaySurface(ui.getDisplayVideoSurface());

            }

    }

 

对于变量ui,从对VideoCallUi实例创建的分析过程我们知道,它就是VideoCallFragment,所以ui.showVideoUi就是VideoCallFragment.showVideoUi,它通过inflateVideoCallViews创建VideoCallSurface,实现监听接口,并关联TextureView

 

enableCamera在其他章节分析过,它是通过接口,打开底层的camera

 

 

5.3.3.1.     普通来电

   

 

InCallPresenter showInCall()的调用会拉起来电界面。

 

CallCardPresenter实例的创建:

如同VideoCallPresenterCallCardPresenter先在其相关类CallCardFragment通过createPresenter方法创建,createPresenter方法则在CallCardFragment的父类BaseFragment的构造函数里被调用,就是所在CallCardFragment类创建的时候,就创建了CallCardPresenter

 

CallCardPresenter通过InCallPresenter.getInstance().addListener(this)InCallPresenter注册,在CallCardPresenter.onUiReady里。

CallCardPresenter.onUiReadyBaseFragmentonActivityCreated调用。

 

CallCardFragmentIncall_screen.xml作为控件,布局加载时被初始化,在InCallActivity.javainitializeInCall被赋值给引用。

CallCardFragmentonCreateView会加载自己的布局文件call_card_content

 






如果觉得我的文章对您有用,请打赏。您的支持是对我莫大的认可


版权声明:本文为博主原创文章,未经博主允许不得转载。

Android6.0的phone应用源码分析(4)——phone拨号流程分析

1.1   Dialer拨号 拨打电话需要开启Dialer(拨号盘),当用户触发onClick事件,DialtactsActivity的onClick()方法被触发: public...

java反射使用举例(全)

本文将叙述如何运行时查看类信息,其中包括变量,方法,以及通过反射修改变量,执行方法等 包括如何反射匿名内部类及如何执行其方法,但是笔者强烈不建议这么做,这里只是演示反射而已   下面...
  • liranke
  • liranke
  • 2014年03月27日 20:56
  • 4977

Android得到呼入的手机号码

最近开发项目中需要监听当前手机的状态(空闲,来电,接通),在来电时需要获取来电的手机号码。 写了一个服务一直运行在后台来对手机的状态进行监听,代码如下。 监听手机状态的Service: impo...

Android4.0通话呼入+呼出时序图

  • 2017年09月21日 15:50
  • 170KB
  • 下载

android 呼入电话的监听(来电监听)

android 呼入电话的监听(来电监听)     需要权限: Xml代码   uses-permission android:name="android.p...

Android 5.0 呼叫流程--呼出

11 5.       Android 5.0 呼叫流程 5.1         MO call 我们先给出MO起呼过程的示例流程图,然后结合该图做代码流程的分析: 5.1.1   拨号请求(C...

Android 5.0 呼叫流程

5.1 MO CALL 5.1.1   拨号请求(CallActivity) 我们从CallActivity来开始看MO呼叫流程,在他的processInt...
  • jwc2436
  • jwc2436
  • 2015年11月18日 15:55
  • 553

Android 5.0 呼叫流程--SIP呼出

4.2.1.  5.0 SIP呼叫MO流程   SIP MO呼叫流程如下图所示(为了便于看清,分两段截图):       3.6.2.1.    SIP呼叫App层处理流程   ...

Android5.0 呼叫流程--挂断

5.2         MO terminate MO方主动挂断电话有不同的方式,常规的是在通话界面点击挂断按钮挂断电话,还有一种是通过硬件挂断,如POWER键或其他物理按键挂断,这个要看厂家自行的设...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 5.0 呼叫流程--呼入
举报原因:
原因补充:

(最多只允许输入30个字)