第1章 主动拨号流程分析

第1章 主动拨号流程分析

Java Application应用层《--------》Dialer拨号盘和Phone应用;

Java Frameworks 框架层《--------》Telephony Frameworks层

User Libraries系统运行库层《--------》RIL层

拨打电话的大致流程是:DialerTeleComServiceTeleComFrameworkTeleponyServiceTelephonyFrameworkRIL

总结:

DialpadFragment.onClick()

DialpadFragment.handleDialButtonPressed()

CallIntentProcessor.processIntent()

CallsManager. startOutgoingCall()

CallsManager.java的placeOutgoingCall()

ConnectionService. createConnection()

TelephonyConnectionService.onCreateOutgoingConnection()

GsmCdmaPhone.dial()--》dialInternal()

RIL.dial()

拨号流程总体时序图分析:

拨号流程时序图1

拨号流程时序图图2

 

1.1 拨号界面DialtactsActivity的onClick

ActivityManager启动DialtactsActivity的Actiivity拨号盘界面,DialtactsActivity中的onClick方法便是进入拨号盘的代码入口。

在onClick方法中会调用mDialpadFragment.dialButtonPressed()和mDialpadFragment.showDialpadFragment

1.2 DialpadFragment拨号盘表单

目录是:/packages/apps/Dialer/java/com/android/dialer/dialpadview/DialpadFragment.java

如果我们按了拨打电话的按钮就会调用dialButtonPressed();---handleDialButtonPressed();

1)handleDialButtonPressed():的作用是判断是不是空号,是不是禁播号码;创建intent,并调用DialerUtils. startActivityWithErrorToast()方法。

判断是不是空号,是不是禁播号码

else{正常拨号中创建intent

 

//调用DialerUtils. startActivityWithErrorToast

 

图1创建intent,调用DialerUtils的方法

2)CallUtil中

CallUtil.getCallIntent(String number, PhoneAccountHandle accountHandle)--》getCallIntent(number, null, accountHandle)---》getCallIntent(getCallUri(number), callOrigin, accountHandle);--》……--》最终会调用getCallIntent( Uri uri, String callOrigin, PhoneAccountHandle accountHandle, int videoState)

我们看一下getCallUri(),它是将号码封装成uri;且会判断是普通电话流程还是网络电话流程。

图2它是将号码封装成uri

接着看一下最后调用的getCallIntent(),这里intent就创建完了,intent创建完了就会传入CallUtils里面的startActivityWithErrorToast()方法【N4手机】

图3最终的getCallIntent(),在过程中会将号码封装成uri

3)DialerUtils. startActivityWithErrorToast()

 

图4会用到CallUtil的startActivityWithErrorToast()

CallUtil的startActivityWithErrorToast()

 

图5会调用TelecomManager.placeCall()

【getTelecomManager是TelecomManager类型的】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值