Android 7.0 通话界面(InCallUI)是怎么出来的。

InCallUI 最终的启动是在

               packages\apps\Dialer\InCallUI\src\com\android\incallui\InCallPresenter.java

          调用此函数启动的

              public Intent getInCallIntent(boolean showDialpad, boolean newOutgoingCall) {



至于为什么会调用到这里

  打电话时会有一个Intent.ACTION_CALL

然而在\packages\services\Telecomm\AndroidManifest.xml

       <activity android:name=".components.UserCallActivity"

           会接收到这个"android.intent.action.CALL"


 进入到 UserCallActivity 在 onCreate函数中

            调用   new UserCallIntentProcessor(this, userHandle).processIntent(getIntent(), getCallingPackage(), true );

            调用   UserCallIntentProcessor类中的 processIntent 函数,然后通过 processOutgoingCallIntent()函数发送广播


PrimaryCallReceiver.java

接收到广播后调用 

getTelecomSystem().getCallIntentProcessor().processIntent(intent);


然后就跑到了

CallIntentProcessor.java 中的processIntent函数中,

调用processOutgoingCallIntent函数中的 Call call = callsManager.startOutgoingCall(handle, phoneAccountHandle, clientExtras, initiatingUser); 启动通话

        

启动通话首先得在 CallsManager.java 文件中的startOutgoingCall方法中addCall(call); 添加通话

最终会在InCallController.java中onCallAdded 函数中绑定服务bindToServices(call);

    绑定服务的方法在InCallServiceBindingConnection 类中的connect函数中,最终绑定成功就会跑到

(以上文件全在)packages\services\Telecomm\下


packages\apps\Dialer\InCallUI\src\com\android\incallui\InCallServiceImpl.java 中的onBind 方法中

最终调用 InCallPresenter.getInstance().maybeStartRevealAnimation(intent); 

的方法启动了IncallUI







猜你喜欢

转载自blog.csdn.net/ieiqny1/article/details/78751085