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