拨号流程分析(第一篇)

本文详细解析了Android 8.0系统中Dialer拨号流程,从打开电话应用的拨号盘开始,经过DialtactsActivity的onCreate(),到拨号按键的onClick()事件,接着探讨了DialpadFragment的handleDialButtonPressed()方法,以及CallIntentBuilder和TelecomManager如何处理拨号请求,最后涉及跨进程服务调用和TelecomService的实现。
摘要由CSDN通过智能技术生成

本文基于Android 8.0

打开手机通话应用的拨号盘

我们使用 adb logcat -vtime -b events命令抓取打开电话应用的log,打出的log如下:

I / am_new_intent ( 797): [0 , 69578539 , 51 ,com.android.dialer/.app .DialtactsActivity, android .intent . action . MAIN , NULL , NULL , 270532608]
I/am_on_resume_called( l726): [0 ,com.android.dialer.app.DialtactsActivity, LAUNCH_ACTIVITY]

打印出的event日志告诉我们,点击电话按钮进入拨号界面,ActivityManagerService将启动com.android.dialer 包下的DialtactsActivity。其中797代表ActivityManagerService所在进程,即system_server进程,1726代表DialtactsActivity所在的dialer进程。使用adb shell ps -ef可查看相关的进程信息:

USER   PID PPID VSZ     NAME
system 797 583  4741680 systern_server
u0_al3 1726 583 4357400 com.android.dialer
进入拨号界面DialtactsActivity

文件路径为:/packages/apps/Dialer/java/com/android/dialer/app/DialtactsActivity.java
通过该Activity的onCreate()方法导入的布局,我们可以找到对应的xml布局文件,布局文件中的自定义控件FloatingActionButton就是拨号键,我们继续看该按键的onClick()事件处理,在拨号盘未打开时会打开拨号盘,在已经打开的情况下会加载上一次的拨号号码。拨号盘对应的界面为DialpadFragment,在输入框有号码情况下,点击拨号键会执行handleDialButtonPressed()方法,该方法判断号码合法性,若合法继续拨号流程,否则提示用户:

  • 创建用于拨号请求的Intent对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值