众所周知,我们监听返回键事件,无法是下面两个方法:

Android之Home键监听封装
@Override      public void onBackPressed() {          //do something          //super.onBackPressed();      }            @Override      public boolean onKeyDown(int keyCode, KeyEvent event) {          if(keyCode == KeyEvent.KEYCODE_BACK){              //do something          }          return super.onKeyDown(keyCode, event);      }  
View Code

于是乎,我们理所当然的想到,监听Home键的方法是:if(keyCode == KeyEvent.KEYCODE_HOME)。

但实际上,这样是行不通的,因为此时home键的消息在framework层就已经被拦截,所以,我们在应用中通过此方法是无法监听到Home键的消息的。

那么我们如何捕获Home键事件,并作出相应处理呢?其实系统还是给我们发出广播的,下面,就跟大家分享一下,封装好了的监听Home键的方法:

HomeWatcher类:

/**  * Home键监听封装  *   * @author way  *   */  public class HomeWatcher {        static final String TAG = "HomeWatcher";      private Context mContext;      private IntentFilter mFilter;      private OnHomePressedListener mListener;      private InnerRecevier mRecevier;        // 回调接口      public interface OnHomePressedListener {          public void onHomePressed();            public void onHomeLongPressed();      }        public HomeWatcher(Context context) {          mContext = context;          mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);      }        /**      * 设置监听      *       * @param listener      */      public void setOnHomePressedListener(OnHomePressedListener listener) {          mListener = listener;          mRecevier = new InnerRecevier();      }        /**      * 开始监听,注册广播      */      public void startWatch() {          if (mRecevier != null) {              mContext.registerReceiver(mRecevier, mFilter);          }      }        /**      * 停止监听,注销广播      */      public void stopWatch() {          if (mRecevier != null) {              mContext.unregisterReceiver(mRecevier);          }      }        /**      * 广播接收者      */      class InnerRecevier extends BroadcastReceiver {          final String SYSTEM_DIALOG_REASON_KEY = "reason";          final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";          final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";          final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";            @Override          public void onReceive(Context context, Intent intent) {              String action = intent.getAction();              if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {                  String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);                  if (reason != null) {                      Log.e(TAG, "action:" + action + ",reason:" + reason);                      if (mListener != null) {                          if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {                              // 短按home键                              mListener.onHomePressed();                          } else if (reason                                  .equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {                              // 长按home键                              mListener.onHomeLongPressed();                          }                      }                  }              }          }      }  }  
接下来,我们需要在应用中开启监听,下面是以在Activity中的应用为例:
Android之Home键监听封装
/**  * 应用HomeWatcher小例  *   * @author way  *   */  public class MainActivity extends Activity {      private static final String TAG = "MainActivity";      private HomeWatcher mHomeWatcher;        @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);            mHomeWatcher = new HomeWatcher(this);          mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() {              @Override              public void onHomePressed() {                  Log.e(TAG, "onHomePressed");              }                @Override              public void onHomeLongPressed() {                  Log.e(TAG, "onHomeLongPressed");              }          });          mHomeWatcher.startWatch();      }        @Override      protected void onPause() {          super.onPause();          mHomeWatcher.stopWatch();// 在onPause中停止监听,不然会报错的。      }  }  
View Code

更多相关文章

  1. android获取资源文件R.drawable中的图片的相关方法
  2. Android 事件总线OTTO用法快速入门
  3. android获取资源文件非主流方法
  4. Android权限申请:自带方法 + 第三方库实现
  5. Android 学习 之 关闭应用程序的方法
  6. Android中Activity触摸事件传递源码学习
  7. 一个hello程序的android内核模块编译方法及在模拟器中进行测试结
  8. Android实现计时与倒计时(限时抢购)的几种方法(线程)

随机推荐

  1. android应用去掉title bar
  2. android触摸实现物体运动方式
  3. 自定义Android菜单背景
  4. Android(安卓)MIME类型结构
  5. 从别的包发起另一个包的活动以及RadioBut
  6. android 启动Activity的四种模式
  7. Android开发学习 之 一、开发环境的搭建
  8. Android之添加快捷方式(Shortcut)到手机
  9. Android(安卓)Camera HAL设计初步
  10. android studio无法在可视化页面预览布局