Android Bug(?):onKey 之后声明它是 KeyEvent.ACTION_UP [重复]

Posted

技术标签:

【中文标题】Android Bug(?):onKey 之后声明它是 KeyEvent.ACTION_UP [重复]【英文标题】:Android Bug(?): onKey after while states it's KeyEvent.ACTION_UP [duplicate] 【发布时间】:2012-09-16 19:13:57 【问题描述】:

可能重复:OnTouchListener, ACTION_UP fires automatically after 30 second timeout

我使用下面的代码来检查一个键是否被点击:

@Override
    public boolean onKey(View v, int keyCode, KeyEvent event) 

        // Little method to allow the sound to be changed 
        if(keyCode == 24 || keyCode == 25) 
            return false;
        

        if(event.getAction() == KeyEvent.ACTION_DOWN) 
            //  if(resetKeyPress != true) 
            this.keyCode = keyCode;
            //  resetKeyPress = true;
            if(this.logGameEngineInputLog == true) 
                gameEngineLog.d(classTAG, "Pressed down " + this.keyCode);
            
            //  
        
        else if(event.getAction() == KeyEvent.ACTION_UP)
            //waitUntilReleased = false;
            //this.changeKeyCode(null);
            if(this.logGameEngineInputLog == true) 
                gameEngineLog.d(classTAG, "Released key " + this.keyCode);

            

            this.keyCode = null;

            //  resetKeyPress = false;

        

        return true;
    

当我长时间单击一个按钮时,它一直说按下了一个按钮,但是过了一会儿它说该键已释放,即使我仍然按住该键。为什么要这样做?有没有办法防止这种情况?这是 android 操作系统故意这样做的吗?如果是,为什么?

【问题讨论】:

可能类似,但我使用 OnKeyListener。 这是为摩托罗拉设备设计的吗?如果您点击重复问题上的链接,他们似乎认为这是一个“功能”。听起来没有任何解决方法。 【参考方案1】:

我们不知道处理这个事件的类型是什么:View、Activity?

在 View 案例中,onKey 仅处理硬件按键事件(根据文档:Android Reference - View.KeyEventListener)

此外,如果您查看此线程:How to differentiate between long key press and regular key press?,您可以看到 Activity.onKeyLongPress() 方法的实现,以及您不应该犯的错误。

【讨论】:

以上是关于Android Bug(?):onKey 之后声明它是 KeyEvent.ACTION_UP [重复]的主要内容,如果未能解决你的问题,请参考以下文章

寻找bug并消灭系列——记录在Android开发所遇到的bug

Android 安全 App发布之后收集bug信息--腾讯Bugly的使用

Android 天气APP(三十五)修复BUG升级网络请求框架

Android接收蓝牙多媒体按键事件的bug

Android 新浪博客分享问题总结

android bug笔记