`
dingran
  • 浏览: 376172 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

按键长按的一种监听方法

阅读更多
监听按键长按有很多方法,这个是和onkeyDown等并列提供的

一种标准方法,只是直接使用不能起作用,需要一些处理才行。

   1.必现在onKeyDown 中将第一次的消息return true;

然后调用event.startTracking();

  2.可以在覆写的onKeyLongPress函数中监听到这个按键长按的事件并

做处理。

  最初从福州出差期间,我始终不明白这个东西是干什么用的,就在昨天我

关机睡觉的时候才想明白了,关机时的电源键需要长按才起作用,你短按一下

没用的。顿时醒悟,或许我们一会可以用到,请各位同仁珍藏。

  谢谢。

  附件是这个Demo的工程,操作起来主要是看log。


/**
 *    这个Demo是用于监听onKeyLongPress函数的,
 * 一般情况下,这个函数是不会被调用的,需要做些特殊
 * 处理,才能监听到按键的长按事件,除KEYCODE_ENTER
 * 和KEYCODE_DPAD_CENTER之外的按键。不同于view的
 * onLongClickListener。
 *    应用情景,比如长按一个按键,然后响应事件。
 *    KeyEvent的Callback回调中,只有这个函数是我们
 * 不熟悉且没有使用到的。另外的onKeyDown和onKeyUp和
 * onKeyMultiple都是我们常用的,这里不赘述。
 *    这里以按键E做测试。
 * @author dingran
 *
 */
public class LongPressTestActivity extends Activity {

    private final String TAG = "dingran.longpress.test.LongPressTestActivity";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    // KEYCODE_ENTER 不行

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        Log.d(TAG, "onKeyDown keyCode = "+keyCode);
//        Log.d(TAG, ""+ 1/0);
        if(keyCode == KeyEvent.KEYCODE_E && event.getRepeatCount() == 0){
            event.startTracking();
            return true;
        }else{
            return false;
        }
        
//        return super.onKeyDown(keyCode, event);
    }

    @Override
    public boolean onKeyLongPress(int keyCode, KeyEvent event) {
        Log.d(TAG, "onKeyLongPress keyCode = "+keyCode);
        if(keyCode == KeyEvent.KEYCODE_E){
            Log.d(TAG, "onKeyLongPress KEYCODE_E");
            return true;
        }
        
        return super.onKeyLongPress(keyCode, event);
    }

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        Log.d(TAG, "onKeyUp");
        Log.d(TAG, "onKeyUp "+event.getFlags());
        int flag = KeyEvent.FLAG_CANCELED | KeyEvent.FLAG_CANCELED_LONG_PRESS;
        Log.d(TAG, "onKeyUp flag = "+flag);
        if(event.getFlags() == flag){
            Log.d(TAG, "onKeyUp in long press up");
        }
        
        return super.onKeyUp(keyCode, event);
    }

    
} 
分享到:
评论

相关推荐

    按键长按、短按、双击检测。

    本文将深入探讨一种基于状态机实现的按键检测机制,该机制能灵活地处理按键的各种事件,并且允许按键的动态添加与删除。 状态机是一种描述系统行为的模型,它通过一系列预定义的状态和状态之间的转移来表示系统的...

    基于STM32+MultiButton实现的按键检测,单击、双击、长按、保持、按键松开、按键弹起.zip

    STM32是意法半导体(STMicroelectronics)推出的一种基于ARM Cortex-M内核的微控制器系列,它具有高性能、低功耗的特点,广泛应用在嵌入式系统设计中。MultiButton则是指在系统中集成多个物理按键,用于接收用户的...

    JavaScript监听键盘事件代码实现

    在编写监听函数,例如`keyboard`函数时,我们可以接收一个事件对象`eve`作为参数。这个对象包含了关于触发事件的具体信息,例如: - `key`属性:表示被按下的键对应的字符。虽然这个属性在现代浏览器中广泛支持,但...

    一种基于Android平台机顶盒的按键修复Recovery系统方法.pdf

    本文针对Android机顶盒在Recovery模式下可能出现的问题,如意外修改或系统损坏导致无法正常升级,提出了一种按键修复Recovery系统的方法。这种方法旨在增强系统的稳定性和可靠性,同时也简化了用户对故障恢复的操作...

    Electron中通过globalShortcut实现监听键盘事件进而实现快捷键功能示例代码.zip

    `globalShortcut`模块是Electron提供的一种方便的方法,它允许开发者注册全局快捷键,当用户按下这些快捷键组合时,触发相应的事件。下面我们将深入探讨如何使用`globalShortcut`来监听键盘事件并实现快捷键功能。 ...

    利用ir接收红外信号测量按键键值

    首先,红外遥控器发送的信号是通过一种编码方式来传输按键信息的,常见的编码格式有NEC、RC5、SIRC等。在本项目中,我们可能需要解码的是NEC编码,因为它是家电遥控器中最常用的格式。NEC编码通常包含一个起始位、...

    JavaScript长按鼠标左键弹出快捷菜单效果代码

    在JavaScript编程中,实现长按鼠标左键弹出快捷菜单的效果是一种常见的交互设计,它可以提升用户的体验,使得操作更加便捷。这个代码示例是专为前端开发者设计的,旨在帮助他们在网页应用中集成这一功能,并确保兼容...

    Android 两种方法实现长按返回健退出

    总结来说,实现长按返回键退出应用的方法主要通过监听并处理按键事件。第一种方法适用于快速退出,而第二种方法则兼顾了提示与退出的双重需求。在实际开发中,应根据应用的具体需求和用户习惯选择合适的方式。

    Android键盘监控源码,检测按键

    本项目"Android键盘监控源码,检测按键"提供了一种方法来捕获和分析Android设备上的实体键盘输入。下面将详细介绍这个项目及其相关知识点。 一、Android权限与API接口 在Android中,为了监听键盘事件,开发者需要...

    电子功用-智能电视中按键事件的处理方法及装置

    智能电视作为一种集互联网、多媒体和通信功能于一体的电视设备,其用户交互方式多样,其中按键操作是最基础且常见的交互手段。处理按键事件不仅包括对物理按键的响应,还包括对遥控器按键、触摸屏按键等虚拟按键的...

    GridView长按显示删除按钮并实现删除功能

    在Android开发中,GridView是一种常见的布局管理器,用于展示数据集,通常用于创建网格状的视图。在很多应用中,我们可能需要为GridView的每个条目(Item)添加长按操作来显示额外的功能,例如删除按钮。本教程将...

    11_key_filter_按键检测_

    另一种方法是使用定时器中断。定时器可以设定一个周期性的中断,比如每隔一定时间检查一次按键状态。当检测到按键状态变化时,记录下当前状态。这种方法可以减少因按键检测引起的中断次数,提高系统效率。但是,它的...

    05 1602LCD显示电话拨号键盘按键实验【Proteus仿真】

    51单片机系列是微控制器的一种,具备丰富的GPIO引脚,适合驱动LCD。 Proteus是一款强大的电子设计自动化(EDA)工具,支持硬件仿真和虚拟原型设计。在Proteus中,我们可以建立电路模型并实时运行单片机程序,这对于...

    ControlDemo:Android板卡遥控器键盘监听适用于多页面需要针对同一个按键改变不同的处理的场景,兼容连续按键事件

    总的来说,`ControlDemo`项目提供了一种在Android应用中处理遥控器键盘输入的范例,尤其是针对多页面场景和连续按键事件的处理。开发者可以从中学到如何利用`KeyEvent`、全局监听、定时器等工具来实现这样的功能,这...

    004、按键识别.7z

    7z是一种高效的文件压缩格式,提供比ZIP更好的压缩率。 【标签】:“004、按键识别.7z”标签与标题一致,再次强调了主题,同时也可能表示这是一个系列教程或文档的一部分,"004"可能是该系列的第四部分。 【压缩...

    TestHomeWatcher

    总的来说,"TestHomeWatcher"作为一个Home键监听的Demo,它提供了一种有效的方式来监听和处理Home键事件,这对于那些需要在用户按下Home键时执行特定操作的应用来说是非常有价值的。但是,这种做法应当谨慎使用,...

    Android监听Home键实例详解

    首先,我们了解一种常见的误解:通过重写`Activity`的`onKeyDown()`方法来监听Home键。这种方法是无效的,因为系统不会将Home键的事件传递给`onKeyDown()`。示例代码如下: ```java @Override public boolean ...

    android界面编程基础

    例如,匿名内部类是一种常见的实现方式: ```java Button button = (Button)findViewById(R.id.my_button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ...

Global site tag (gtag.js) - Google Analytics