android中通过拨号键打开contacts相关界面的流程分析

首先拨号键属于全局策略管理,所以在PhoneWindowManager中对KEYCODE_CALL事件做了对应的处理,如果按下KEYCODE_CALL时,话机处于RINGING状态,则通过Phone执行answerRingCall接口实现接听电话的调用。而在PhoneWindow中有对KEYCODE_CALL更详细的逻辑处理。当KeyDown时...android更关心此时是否是长按CALL,所以这不是我所想要知道的细节,而在KeyUp时有startCallActivity的调用,哈哈~ 开始跟Call界面关联了。在这个调用中PhonwWindow发出了一个action为ACTION_CALL_BUTTON的Intent请求,不用猜,Contacts中绝对有一个Acivity对这个类型的Intent做了捕获,查看Contacts的AndroidManifest,发现只有DialtactsActivity对该类型的Intent做处理。检查一遍DialtactsActivity发现这是一个TabActivity,而我所关心的拨号界面,通话记录,联系人等界面均为其一个Tab,所以可以确定android就是通过一个简单的Intent将这个界面调用出来的。但是在实际中我遇到一些奇怪的问题(页面定位不准),所以继续检查。在fixIntent中DialtactsActivity会给来自Call键的Intent设置一个CONTENT_TYPE的type,同时标记一个扩展名为call_key 的boolean值(true),并立即在setCurrentTab中对这2个值做了检测,首先是如果call_key 为true, type为CONTNT_TYPE 那么就通过ITelephony调用showCallScreen().而这个调用里面如果话机不是idel状态则会调用InCallScreen界面,然后返回,退出。否则根据componentName进行选择显示的Tab
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值