Android讓自己的App捕獲處理系統按鍵Home Key和Power Key
來源:程序員人生 發布時間:2014-11-13 09:00:23 閱讀次數:6378次
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
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈