国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 互联网 > Android让自己的App捕获处理系统按键Home Key和Power Key

Android让自己的App捕获处理系统按键Home Key和Power Key

来源:程序员人生   发布时间:2014-11-13 09:00:23 阅读次数:6217次

Android中的Home Key,Power Key默许都是由系统的Framework来响应,如果想让自己的利用捕获响应,该怎样做呢?


Home Key比较简单,不触及系统源码修改:

1. 在此 app 的 main Activity 的 onCreate 方法中加入以下这行:

<span style="font-size:14px;">getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED);</span>

2. 重写此 main Activity 的 onKeyDown() 方法, 实现 home key 的处理部份, 并
终究 

return true;


Power Key略微麻烦1些,要修改源码:

1: 修改 phoneWindowManager.java 的 interceptKeyBeforeQueueing 方法,在 reference line 后加入下面这段代码

case KeyEvent.KEYCODE_POWER: { //reference line result &= ~ACTION_PASS_TO_USER; //reference line // add begin ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); try{ if (activityManager.getRunningTasks(1).get(0).topActivity.getPackageName().equals(" your_special_package_name")){ //Please reset the special package name. result |= ACTION_PASS_TO_USER; Xlog.d(TAG,"detect power key in special package, pass to user!") } }catch(NullPointerException e){ Xlog.d(TAG,"ingore a NullPointerException .."); } //add end


2: 一样在此分支内, 找到 else 语句段, 并找到以下位置加入
if (interceptPowerKeyUp(canceled || mPendingPowerKeyUpCanceled)) { //参考行 if(!((result & ACTION_PASS_TO_USER) == ACTION_PASS_TO_USER)){ //加入行 result = (result & ~ACTION_WAKE_UP) | ACTION_GO_TO_SLEEP; //原有代码 } } //加入行

转载请注明出处:周木水的CSDN博客 http://blog.csdn.net/zhoumushui

我的GitHub:周木水的GitHub https://github.com/zhoumushui


生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生