android  监听指定按键事件

前言:为了满足产品需求,或者开发童鞋想开个后门,可以在一些特定按键做一些特殊操作,这个时候我们需要监听程序的按键事件。

 

一、部署变量、方法

  1、定义变量

       首先,新建几个变量用于对应按键事件

          private static final int number8 = KeyEvent.KEYCODE_8; //用于监听哪个按键,这个可以自己去修改成相对应的按键

          private static final int number9 = KeyEvent.KEYCODE_9;//用于监听哪个按键,这个可以自己去修改成相对应的按键

          private static final int MSG_KEY_TIME = 1; //handler消息

          private static final int KEY_TIMEOUT = 3000;//按键多少秒内有效

          private static final CodeContainer showVersionCodes = new CodeContainer(new int[]{number9, number9, number8, number8}); //需要新建一个内部类,用于保存按键变量

 2、类与方法

       变量定义完成后,我们需要相对应的类与方法去支持监听按键操作,所以需要定义以下方法与内部类 

  1.   //方法介绍,定义静态内部类用于接收对应的按键code
  2. private static class CodeContainer {
        private int index;
        private int[] codes;    //按键排列方式
    
        CodeContainer(int[] codes) {
            this.codes = codes;
        }
    
        void clear() {
            index = 0;
        }
    }
  3.   //方法介绍,用于监听按键传进来的keycode与keyevent,用于判断是否对应相关按键,并且是否属于多少秒内响应
  4. public void onKey(Context context, int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
    
            keyHandler.removeMessages(MSG_KEY_TIME);
            keyHandler.sendEmptyMessageDelayed(MSG_KEY_TIME, KEY_TIMEOUT);
    
            if (match(showVersionCodes, keyCode)) {
                //显示版本号
                Toast.makeText(context, "Versioncode:" + BuildConfig.VERSION_CODE, Toast.LENGTH_LONG).show();
            }
        }
    }
  5. //方法介绍,用于判断按下次数是否对应的上需要监听的按键次数及code
    private boolean match(CodeContainer container, int keyCode) {
        if (container.index >= container.codes.length) {
            return false;
        }
        if (container.codes[container.index] == keyCode) {
            container.index++;
            if (container.index == container.codes.length) {
                container.clear();
                return true;
            }
        } else {
            container.clear();
        }
        return false;
    }
  6.    //介绍,用于清空按键次数 
  7. Handler keyHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == MSG_KEY_TIME) {
                showVersionCodes.clear();
            }
        }
    };

还在想着怎样调用的小伙伴们别着急,调用很简单

你写在某个类里面,直接在你需要用到的地方,例如(onkeydown,又或者dispatchKeyEvent里面调用)    

在外面先定义一个全局变量

类名 private XXXX xxx ;

xxx = new XXXX()

xxx.onkey

大功告成啦,快去看看吧。是不是简单又方便!~

 

还是不懂的小伙伴,想要源码的也可以私我!~

   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值