Android长按键按,避免FLAG_CANCELED

时间:2013-08-06 00:18:13

标签: android back-button keyevent

我正在尝试实现长按键识别,我已经覆盖了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但它似乎不起作用...

有解决方法吗?我可以定义最长的印刷时间吗?

== UPDATE ==

好的,所以当我删除事件跟踪的注释时,会调用长按回调,然后返回true或false仍然不会改变keyUp在这段时间后取消的最终结果。

感谢。

1 个答案:

答案 0 :(得分:0)

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

我的解决方案是将时间从5000毫秒缩短到3000毫秒,并允许另一个退出模式作为这一部分的一面,对于那些操作系统的设备可能会让我惊讶于3000ms之前的取消事件......