监听HOME键

来源:互联网 发布:服装设计软件手机版 编辑:程序博客网 时间:2024/05/22 15:54
 

监听HOME键

 1207人阅读 评论(2) 收藏 举报
dialogsystemstringactionnullclass

刚开始,因为监听手机的back键是有一个简单判断方法,所以第一反应觉得home应该也一样,if (keyCode == KeyEvent.KEYCODE_HOME && event.getRepeatCount() == 0){// do sth}。但测试下来发现home键可不是那么回事儿,监听不到。网友说这个和SDK有关系。那有没有不依赖sdk的方法呢。这个是可以有滴。自己写两个监听类,然后在Activity中注册以下home的监听广播。DEMO如下:

一、定义接口OnHomePressedListener。抽象方法是home被按下后的回调方法

[java] view plaincopy
  1. package country.company.project.util;  
  2.   
  3. public interface OnHomePressedListener {  
  4.     public void onHomePressed();  
  5.   
  6.     public void onHomeLongPressed();  
  7. }  

二、定义监听类HomeWatcher。

[java] view plaincopy
  1. package country.company.project.util;  
  2.   
  3. import android.content.BroadcastReceiver;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6. import android.content.IntentFilter;  
  7. import android.util.Log;  
  8.   
  9. public class HomeWatcher {  
  10.   
  11.     static final String TAG = "hg";  
  12.     private Context mContext;  
  13.     private IntentFilter mFilter;  
  14.     private OnHomePressedListener mListener;  
  15.     private InnerRecevier mRecevier;  
  16.   
  17.     public HomeWatcher(Context context) {  
  18.         mContext = context;  
  19.         mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);  
  20.     }  
  21.   
  22.     public void setOnHomePressedListener(OnHomePressedListener listener) {  
  23.         mListener = listener;  
  24.         mRecevier = new InnerRecevier();  
  25.     }  
  26.   
  27.     public void startWatch() {  
  28.         if (mRecevier != null) {  
  29.             mContext.registerReceiver(mRecevier, mFilter);  
  30.         }  
  31.     }  
  32.   
  33.     public void stopWatch() {  
  34.         if (mRecevier != null) {  
  35.             mContext.unregisterReceiver(mRecevier);  
  36.         }  
  37.     }  
  38.   
  39.     class InnerRecevier extends BroadcastReceiver {  
  40.         final String SYSTEM_DIALOG_REASON_KEY = "reason";  
  41.         final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";  
  42.         final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";  
  43.         final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";  
  44.   
  45.         @Override  
  46.         public void onReceive(Context context, Intent intent) {  
  47.             String action = intent.getAction();  
  48.             if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {  
  49.                 String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);  
  50.                 if (reason != null) {  
  51.                     Log.e(TAG, "action:" + action + ",reason:" + reason);  
  52.                     if (mListener != null) {  
  53.                         if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {  
  54.                             // home键  
  55.                             mListener.onHomePressed();  
  56.                         } else if (reason  
  57.                                 .equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {  
  58.                             // 长按home键  
  59.                             mListener.onHomeLongPressed();  
  60.                         }  
  61.                     }  
  62.                 }  
  63.             }  
  64.         }  
  65.     }  
  66. }  

三、在Activity的onCreate()或者其它你需要的地方注册监听器

[java] view plaincopy
  1. package country.company.project.util;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.util.Log;  
  6. import country.company.project.util.R;  
  7.   
  8. public class HomeWatcherActivity extends Activity {  
  9.     private final String TAG = "hg";  
  10.     @Override  
  11.     public void onCreate(Bundle savedInstanceState) {  
  12.         super.onCreate(savedInstanceState);  
  13.         setContentView(R.layout.about);  
  14.         HomeWatcher mHomeWatcher = new HomeWatcher(this);  
  15.         mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() {  
  16.             @Override  
  17.             public void onHomePressed() {  
  18.                 Log.e(TAG, "onHomePressed");  
  19.             }  
  20.             @Override  
  21.             public void onHomeLongPressed() {  
  22.                 Log.e(TAG, "onHomeLongPressed");  
  23.             }  
  24.         });  
  25.         mHomeWatcher.startWatch();  
  26.     }  
  27. }  


各种版本SDK实测OK!

0 0