2013-08-06 81 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之前取消的事件讓我感到吃驚......