問題描述:
自從Android 4.0以後,開發人員是不能監聽和屏蔽Home鍵的,對於KEYCODE_HOME,官方給出的描述如下:
所以,除非修改Framework,都不能直接監聽Home鍵了,網上有朋友說監聽Log日誌,但是現在按Home鍵是不顯示Log日誌的,而且不同的手機型號即使顯示也不會一樣。
在網上找了好多方法都沒有解決……無奈啊。
為了實現使用者按了Home鍵之後處理事件,被逼的另闢蹊徑 使用下面的解決方案了。
解決方案:
1.思路
Activity的生命週期中,
每一個Activity在啟動的時候都要走(執行)OnResume()方法,而且,每一個Activity在被結束的時候都要走OnStop方法,並且,使用者在按Home鍵之後Activity也是要執行Onstop()方法(看圖,圖上說Activity不可見的時候就執行)。
所以,我們可以在每一個Activity的OnStop()方法中,判斷一下所有的Activity的狀態,如果所有的Activity都不可見的時候(都執行過OnStop()),執行我們想要做的操作。
2.邏輯
自訂Application,在其中定義一個全域的HashMap,定義兩個方法,方法一addActivityStatus(Activity activity)用來管理Activity的狀態,方法二 isAllActivityAlive()用來查詢是否所有的Activity都處於啟用狀態。
在每一個Activity中的OnResume()方法中,調用addActivityStatus(Activity activity)把當前的Activity的狀態設定為true啟用狀態,在OnStop()方法先調用addActivityStatus(Activity activity)把狀態設定成false非啟用狀態,然後調用isAllActivityAlive()查看是不是所有的Activity處於非啟用狀態,如果都是非啟用狀態(所有的Activity都執行過OnStop()),那就執行你想要做的操作!!!
寫的好亂啊...
3.實現
1.自訂Application
ManageApplication HashMap<String, Boolean> mapActivity = HashMap<String, Boolean>(); ManageApplication application = application = addActivityStatus(Activity activity, } res = Iterator iter = Map.Entry entry = Object key = value = }View Code
2.在 Mainfest中把Application設成自訂的Application
3.在每一個Activity中都做如下操作
3.1 在OnCreat()中getApplication
setContentView(R.layout.activity_main); Log.e("Status", "OnCreate"
3.2 重寫OnResume(),增加當前Activity的狀態為true啟用狀態
"Status", "onResume",
3.3 重寫OnStop(),更改當前Activity的狀態為false非啟用狀態並判斷所有的Activity是否都處於非啟用狀態
"Status", "onStop", alived ="All Activity Status", alived + ""(!
OK!!!大功告成!o(∩_∩)o