Android Home鍵監聽

shuaibing_ma發表於2016-08-19

如何捕獲Home鍵事件,並作出相應處理呢?其實系統還是給我們發出廣播的,下面是封裝好了的監聽Home鍵的方法:


  1. /** 
  2.  * Home鍵監聽封裝 
  3.  *  
  4.  * @author way 
  5.  *  
  6.  */  
  7. public class HomeWatcher {  
  8.   
  9.     static final String TAG = "HomeWatcher";  
  10.     private Context mContext;  
  11.     private IntentFilter mFilter;  
  12.     private OnHomePressedListener mListener;  
  13.     private InnerRecevier mRecevier;  
  14.   
  15.     // 回撥介面  
  16.     public interface OnHomePressedListener {  
  17.         public void onHomePressed();  
  18.   
  19.         public void onHomeLongPressed();  
  20.     }  
  21.   
  22.     public HomeWatcher(Context context) {  
  23.         mContext = context;  
  24.         mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);  
  25.     }  
  26.   
  27.     /** 
  28.      * 設定監聽 
  29.      *  
  30.      * @param listener 
  31.      */  
  32.     public void setOnHomePressedListener(OnHomePressedListener listener) {  
  33.         mListener = listener;  
  34.         mRecevier = new InnerRecevier();  
  35.     }  
  36.   
  37.     /** 
  38.      * 開始監聽,註冊廣播 
  39.      */  
  40.     public void startWatch() {  
  41.         if (mRecevier != null) {  
  42.             mContext.registerReceiver(mRecevier, mFilter);  
  43.         }  
  44.     }  
  45.   
  46.     /** 
  47.      * 停止監聽,登出廣播 
  48.      */  
  49.     public void stopWatch() {  
  50.         if (mRecevier != null) {  
  51.             mContext.unregisterReceiver(mRecevier);  
  52.         }  
  53.     }  
  54.   
  55.     /** 
  56.      * 廣播接收者 
  57.      */  
  58.     class InnerRecevier extends BroadcastReceiver {  
  59.         final String SYSTEM_DIALOG_REASON_KEY = "reason";  
  60.         final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";  
  61.         final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";  
  62.         final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";  
  63.   
  64.         @Override  
  65.         public void onReceive(Context context, Intent intent) {  
  66.             String action = intent.getAction();  
  67.             if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {  
  68.                 String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);  
  69.                 if (reason != null) {  
  70.                     Log.e(TAG, "action:" + action + ",reason:" + reason);  
  71.                     if (mListener != null) {  
  72.                         if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {  
  73.                             // 短按home鍵  
  74.                             mListener.onHomePressed();  
  75.                         } else if (reason  
  76.                                 .equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {  
  77.                             // 長按home鍵  
  78.                             mListener.onHomeLongPressed();  
  79.                         }  
  80.                     }  
  81.                 }  
  82.             }  
  83.         }  
  84.     }  
  85. }  


需要在應用中開啟監聽,下面是以在Activity中的應用為例:

  1. /** 
  2.  * 應用HomeWatcher小例 
  3.  *  
  4.  * @author way 
  5.  *  
  6.  */  
  7. public class MainActivity extends Activity {  
  8.     private static final String TAG = "MainActivity";  
  9.     private HomeWatcher mHomeWatcher;  
  10.   
  11.     @Override  
  12.     protected void onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.         setContentView(R.layout.activity_main);  
  15.   
  16.         mHomeWatcher = new HomeWatcher(this);  
  17.         mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() {  
  18.             @Override  
  19.             public void onHomePressed() {  
  20.                 Log.e(TAG, "onHomePressed");  
  21.             }  
  22.   
  23.             @Override  
  24.             public void onHomeLongPressed() {  
  25.                 Log.e(TAG, "onHomeLongPressed");  
  26.             }  
  27.         });  
  28.         
  29.     }  

  1.   @Override 
  2.  protected void onResume() {  
  3.         super.onPause();  
  4.      mHomeWatcher.startWatch();// 在onResume中開始監聽,
  5.     }  


  1.   
  2.     @Override  
  3.     protected void onPause() {  
  4.         super.onPause();  
  5.         mHomeWatcher.stopWatch();// 在onPause中停止監聽,不然會報錯的。(實際登出廣播)
  6.     }  
  7. }  

相關文章