【问题标题】:Android long back key press, avoid FLAG_CANCELEDAndroid长返回键,避免FLAG_CANCELED
【发布时间】:2013-08-06 00:18:12
【问题描述】:

我正在尝试实现长按键识别,我已经覆盖了 onKeyDown

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
//          event.startTracking();
        if (backPressedStarted == -1) {
            progressBar.setProgress(0);
            progressBar.setVisibility(View.VISIBLE);
            backPressedStarted = System.currentTimeMillis();        
        } else {
            int pressDuration = (int) (System.currentTimeMillis() - backPressedStarted);
            progressBar.setProgress(pressDuration);
            if (pressDuration > 5000)
                showExitDialog();
        }
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

大约 3.8 秒后,系统调度一个带有标志的 onKeyUp 事件:FLAG_CANCELED

我尝试忽略它并在 key up 方法中返回 true 或 false,但它似乎不起作用...

有没有办法解决这个问题?我可以定义最长的新闻持续时间吗?

== 更新 ==

好的,所以当我删除事件跟踪的评论时,会调用长点击回调,然后返回true或false仍然不会改变keyUp取消的最终结果。

谢谢。

【问题讨论】:

  • onKeyLongPress()onBackPressed() 可以代替吗?
  • 永远不会调用长按...而只有当我在活动中添加 return super.onKeyDown(...) 时才会调用后按。
  • 我已经更新了问题

标签: android back-button keyevent


【解决方案1】:

在挖掘并尝试了多种尝试覆盖它的方法之后,(除了注入我自己的自定义触摸事件,我不想管理这个黑客),我发现这是不可能避免的“特征”。

我的解决方案是将时间从 5000 毫秒缩短到 3000 毫秒,并允许在该模式的一侧使用另一种退出模式,适用于操作系统可能会在 3000 毫秒之前以取消事件让我感到惊讶的设备...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-02
    • 2016-11-06
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 2012-04-25
    • 2021-07-18
    相关资源
    最近更新 更多