Android监听Home键实例详解

 更新时间:2016年02月16日 11:25:46   作者:lg878398509  
这篇文章主要介绍了Android监听Home键的方法,结合实例形式详细分析了Android编程实现监听Home键的具体步骤与相关功能代码,需要的朋友可以参考下

本文实例讲述了Android监听Home键的方法。分享给大家供大家参考,具体如下:

将到android中Home键的监听,很多人第一反应时重写相应Activity的onKeyDown()方法,监听当按下的键的keyCode为KEYCODE_HOME时,进行自己的相应的处理。如:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
  if (keyCode == KeyEvent.KEYCODE_HOME) {
    stopService(mIntentService);
    return true;
  }
  return super.onKeyDown(keyCode, event);
}

但是这样的监听是不能监听到HOME键的。这样的方法只能监听到BACK,MENU键。那么怎么监听Home键了?

1.新建一个监听Home键的Listener

public class HomeListener {
  static final String TAG = "HomeListener";
  private Context mContext;
  private IntentFilter mFilter;
  private OnHomePressedListener mListener;
  private InnerRecevier mRecevier;
  // 回调接口
  public interface OnHomePressedListener {
    public void onHomePressed();
    public void onHomeLongPressed();
  }
  public HomeListener(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();
            }
          }
        }
      }
    }
  }
}

2.在使用的类的onCreate方法中注册Home键的监听

/**
* 注册Home键的监听
*/
private void registerHomeListener() {
    mHomeWatcher = new HomeListener(this);
    mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() {
      @Override
      public void onHomePressed() {
        //TODO 进行点击Home键的处理
        Log.i("xsl", "0000000000000");
        stopService(mIntentService);
      }
      @Override
      public void onHomeLongPressed() {
        //TODO 进行长按Home键的处理
        Log.i("xsl", "0000000000000");
      }
    });
    mHomeWatcher.startWatch();
}

3.在使用的类的onPause方法中停止监听

mHomeWatcher.stopWatch();

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结

希望本文所述对大家Android程序设计有所帮助。

相关文章

  • 分析Android中应用的启动流程

    分析Android中应用的启动流程

    不知道大家有没有好奇过点击Launcher图标时,到唤起一个应用页面,这个流程会是怎么样的?那这篇文章的目的就是尽可能梳理清楚流程,能够让大家对整个流程有一个相对清晰的认知。下面跟着小编一起学习学习。
    2016-08-08
  • Android  Spinner列表选择框的应用

    Android Spinner列表选择框的应用

    这篇文章主要介绍了Android Spinner列表选择框的应用的相关资料,这里对spinner的属性和常用事件和数据绑定都做了介绍,需要朋友可以参考下
    2017-07-07
  • 基于GridView和ActivityGroup实现的TAB分页(附源码)

    基于GridView和ActivityGroup实现的TAB分页(附源码)

    今天为大家介绍下使用GridView和ActivityGroup实现的分页,这里需要将Activity转换成Window,然后再换成成View添加到容器中,具体实现代码如下,感兴趣的朋友可以参考下哈
    2013-06-06
  • Android使用ViewPager加载图片和轮播视频

    Android使用ViewPager加载图片和轮播视频

    这篇文章主要为大家详细介绍了Android使用ViewPager加载图片和轮播视频,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • android通过拼音搜索中文的功能实现代码

    android通过拼音搜索中文的功能实现代码

    这篇文章主要介绍了android通过拼音搜索中文的功能实现代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • android嵌套滚动入门实践

    android嵌套滚动入门实践

    嵌套滚动是 Android OS 5.0之后,google 为我们提供的新特性,本篇文章主要介绍了android嵌套滚动入门实践,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • OKHttp使用详解

    OKHttp使用详解

    OkHttp 是一套处理 HTTP 网络请求的依赖库,由 Square 公司设计研发并开源,目前可以在 Java 和 Kotlin 中使用,这篇文章主要介绍了OKHttp详解,需要的朋友可以参考下
    2024-01-01
  • Android酷炫动画效果之3D星体旋转效果

    Android酷炫动画效果之3D星体旋转效果

    本文要实现的3D星体旋转效果是从CoverFlow演绎而来,不过CoverFlow只是对图像进行转动,我这里要实现的效果是要对所有的View进行类似旋转木马的转动
    2018-05-05
  • Android实现EditText图文混合插入上传功能

    Android实现EditText图文混合插入上传功能

    这篇文章主要为大家详细介绍了Android实现EditText图文混合插入上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Android使用SlidingPaneLayout 实现仿微信的滑动返回

    Android使用SlidingPaneLayout 实现仿微信的滑动返回

    这篇文章主要介绍了Android使用SlidingPaneLayout 实现仿微信的滑动返回,需要的朋友可以参考下
    2018-04-04

最新评论