MTK Phone 主动呼叫流程分析(一)

来源:互联网 发布:软件标题修改器 编辑:程序博客网 时间:2024/06/01 08:42

一、DialpadFragment.onResume 方法

1、mVolteConfCallEnable

Volte 通话标识,是返回true,否返回false

2、DialtactsActivity

启动拨号界面

3、queryLastOutgoingCall


二、DialpadFragment.onClick 方法


1、onclick() 响应拨号按钮事件,交由handleDialButtonPressed()处理

2、startActivityWithErrorToast()发起通话界面,获取TelecomManager服务

3、TelecomManager.placeCall 发起通话,即调用到TelecomServiceImpl.placeCall 方法


三、TelecomManager 类

1、路径:frameworks\base\telecomm 

2、初始化该对象通过Context.getSystemService(Context.TELECOM_SERVICE)完成;

3、调用TelecomManager.placeCall 方法


4、getTelecomService() 实现 AIDL 服务对象的获取


5、placeCall 继而调用到 TelecomServiceImpl.placeCall() 


四、TelecomServiceImpl 类

1、路径:packages/services/Telecomm

2、实例化 ITelecomService.Stub 对象,实现其接口方法 placeCall 

3、

注:TelecomManager TelecomServiceImpl  通过 TelecomLoaderService实现绑定

       实现方法可以参考《AIDL 跨应用服务》


五、TelecomServiceImpl.placeCall 方法


1、获取电话权限,通过userCallIntentProcesser.processIntent 函数传入事件“android.intent.action.CALL” 

2、userCallIntentProcesser 处理三类通话事件类型:CALL , CALL_PRIVILEGED , CALL_EMERGENCY

3、processOutgoingCallIntent() 视频通话判断,继而sendBroadcastToReceiver() --> mContext.sendBroadcastAsUser() 发起通话

4、抽象类Context 的实现类 ContextImpl,实现其方法 sendBroadcastAsUser()

5、ActivityManagerNative.getDefault() 获取 IActivityManager 接口的服务对象,调用ActivityManagerService.broadcastIntent() 方法

6、ActivityManagerService 内部调用 broadcastIntentLocked() 方法

0 0