您的位置:首页 > 移动开发 > Android开发

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

2013-12-09 17:21 267 查看
首先拨号键属于全局策略管理,所以在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: