2013-08-06 139 views
0

我试图实现长按键的认可,我已经覆盖了的onkeydownAndroid的长期回按键,避免FLAG_CANCELED

@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

我试着忽略它,并在关键多达方法返回true或false,但它似乎没有工作...

有没有办法解决?我可以定义最长的按下时间吗?

== == UPDATE

好了,当我删除了事件跟踪的注释中,长按回拨被调用,然后返回true或false仍然没有改变最终结果的使用keyUp取消在那段时间之后。

谢谢。

+0

不' onKeyLongPress()'或'onBackPressed()'而不是? – Geobits

+0

长按不会被调用...而按下的按钮只有在活动中添加返回super.onKeyDown(...)时才会被调用。 – TacB0sS

+0

我已经更新了这个问题 – TacB0sS

回答

0

经过挖掘并尝试多种方法试图重写这个(除了注入我自己的自定义触摸事件,我不想管理这个黑客),我发现这是不可能避免的此功能”。

我的解决办法是缩短从5000毫秒的时间,3000ms,并允许另一个出口模式这一块的一侧,与OS设备可能与3000ms之前取消的事件让我感到吃惊......