------网上找了很多资料,项目中使用,最后将经验总结如下:

1,返回和菜单键是可以直接重写onKeyDown(int keyCode, KeyEvent event) 方法监听:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) { // 监控/拦截/屏蔽返回键
//do something
} else if (keyCode == KeyEvent.KEYCODE_MENU) {

//do something
} else if (keyCode == KeyEvent.KEYCODE_HOME) {

//这里操作是没有返回结果的
}
return super.onKeyDown(keyCode, event);
}

在do something 中,如果返回false则时间不继续传递,也就是不会触发相应的后续事件

2,如果是Home事件,看网上的说法,是底层拦截了这个事件,但是拦截后会发出一个广播。所以注册个广播接收HOME按键事件就行了。

/**
 * Home键监听封装
 * 
 * 
 */ 
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(); 
                        } 
                    } 
                } 
            } 
        } 
    } 
}

在使用的时候:

private HomeListener mHomeWatcher;

在oncreate()中:

mHomeWatcher = new HomeListener(this); 
        mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() { 
            @Override 
            public void onHomePressed() { 
            if(null!=vibrator){
    vibrator.cancel();
    }
    if(null!=timer){
    timer.cancel();
    }
            } 
            @Override 
            public void onHomeLongPressed() { 
            if(null!=vibrator){
    vibrator.cancel();
    }
    if(null!=timer){
    timer.cancel();
    }
            } 
        }); 
        mHomeWatcher.startWatch();

在onpause()方法中:

mHomeWatcher.stopWatch();

[置顶] ANDROID 返回,菜单和HOME键的监听的更多相关文章

  1. android设置软键盘搜索键以及监听搜索键点击时发生两次事件的问题解决

    在输入框中加入android:imeOptions="actionSearch",调用软键盘时,回车键就会显示搜索二字. 我想在点击搜索时,跳转到下一个页面,但是调用setOnKe ...

  2. Android 设置软键盘搜索键以及监听搜索键点击事件

    如图所示,有时候为了布局美观,在搜索时没有搜索按钮,而是调用软件盘上的按钮.调用的实现只需要在XML在输入框中加入android:imeOptions="actionSearch" ...

  3. Android应用中返回键的监听及处理

    MainActivity: package com.testnbackpressed;  import android.os.Bundle;  import android.view.KeyEvent ...

  4. 【Android】各式各样的弹出框与对菜单键、返回键的监听

    Android自带各式各样的弹出框.弹出框也是安卓主要的组件之中的一个.同一时候安卓程序能够对菜单键.返回键的监听.但在安卓4.0之后就禁止对Home键的屏蔽与监听,强制保留为系统守护按键.假设非要对 ...

  5. [置顶] Android开发百科全书

    友情提示根据目录 快速查找问题 %1$s %1$d Android string 1.整型,比如"我今年23岁了",这个23是整型的.在string.xml中可以这样写,<s ...

  6. Android应用中Back键的监听及处理

    MainActivity如下: package cn.testnbackpressed; import android.os.Bundle; import android.view.KeyEvent; ...

  7. android的Home键的监听封装工具类(一)

    android的Home键的监听封装: package com.gzcivil.utils; import android.content.BroadcastReceiver; import andr ...

  8. android平板Home键的监听

    关于android4.2平板Home键的监听 1.android4.0以上的平板Home键是不能屏蔽的,至少在应用层是这样.但是可以监听Home键的触发,主要是通过广播的监听来接受Hone键的触发广播 ...

  9. ios中键值编码kvc和键值监听kvo的特性及详解

    总结: kvc键值编码  1.就是在oc中可以对属性进行动态读写(以往都是自己赋值属性)           2. 如果方法属性的关键字和需要数据中的关键字相同的话                  ...

随机推荐

  1. android ble蓝牙开发略解

    Android 蓝牙4.0开发 1.  权限和相关属性 “android:required="true"表示apk只有在具有bluetooth_le属性的系统里运行,这个4.3之前 ...

  2. EasyUI - Datatable转Json and Json转Datatable

    using System; using System.Data; using System.Linq; using System.Collections; using System.Collectio ...

  3. linux下编译qt5.6.0静态库——configure配置(超详细,有每一个模块的说明)(乌合之众)

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  4. JAVA 操作 DBF 文件数据库

    1.依赖夹包 javadbf-[].4.1.jar jconn3.jar 2.添加属性文件 jdbc.properties jdbc.driverClassName=com.sybase.jdbc3. ...

  5. Servlet过滤器——使用过滤器禁止浏览器缓存页面

    1.概述 IE缓存虽然能提高已储存网站的访问速度,但是过度的IE缓存会影响浏览器的响应速度.同时还可能为网站的运行带来一些不必要的麻烦.例如:可能会因为浏览器缓存的应用,而导致Web服务器不能准确的计 ...

  6. cpp check 分析

    1 FileTabCharacterCheck 为什么检查: 因为对于一个TAB而言,所空的空格不定是固定的,如果在机器A上设置了是4个空格,显示正常,而在机器B上阅读,B机器是100个空格为一个TA ...

  7. POJ 1273 Drainage Ditches(网络流,最大流)

    Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover ...

  8. Java总结之容器

    [容器的概念] 容器:Java API所提供的一系列的实例,用于在程序中存放对象. [容器 API] J2SDK所提供的容器API位于java.util包内. {Collection[Set(Hash ...

  9. Yarn的ApplicationMaster管理

    首先client向ResourceManager提交程序(包括ApplicationMaster程序,ApplicationMaster启动命令,用户程序)后,ResourceManager向资源调度 ...

  10. 让Android中的webview支持页面中的文件上传

    android webview在默认情况下是不支持网页中的文件上传功能的: 如果在网页中有<input type="file" />,在android webview中 ...