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

一、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() 方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章