高通4.4.4 源码中如果要屏蔽home键使之不响应,在应用层修改是没用的。
鉴于来电show出界面时,点击home键没有响应,我们可以打log看系统如何处理。
12-02 16:28:54.634 D/PhoneUtils( 1113): setAudioMode()...RINGING
12-02 16:28:54.644 D/PhoneUtils( 1113): setAudioMode() no change: MODE_RINGTONE
12-02 16:28:55.314 I/WindowManager( 928): Ignoring HOME; there's a ringing incoming call.
关键信息如下:
Ignoring HOME; there's a ringing incoming call.
在Source Insight 中全局搜索上述关键信息,找到名为PhoneWindowManager.java 的源文件
查看framework层代码
定位到名为interceptKeyBeforeDispatching 的函数
从函数名我们可以知道此函数是是在分发按键消息之前进行拦截。
查看对KEYCODE_HOME home键的处理
关键代码如下
来电铃声响起时,return -1; 屏蔽home键
所以我们有屏蔽home键的需求,在这里写判断条件 return -1 做处理即可。
return -1 事件就被拦截了,就不会向上层分发了。
否则 响应home键 返回launcher