2013-02-19 21 views
1

我希望用戶能夠長按音量提高硬件按鈕以跳過歌曲,並在短按下執行常規音量提升操作。如何捕獲Longpress並在KEYCODE_VOLUME_UP上調用標準操作?

我可以區分兩者(我發現this solution,處理onKeyDown,onKeyLongPress和onKeyUp之間的標誌),但我想知道如果我仍然可以在按下音量增加按鈕時調用標準/超級動作。 我似乎無法弄清volumeUp動作何時被調用(在onKeyDown-或onKeyUp-事件中)以及在哪裏調用它。

或者我應該只寫我自己的功能來改變音量?

謝謝。

我的代碼:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { 
     event.startTracking(); 
     if (bLong) { 
      bShort = false; 
      return true; 
     } else { 

      bShort = true; 
      bLong = false; 

      return true; 
     } 
    } 

    return super.onKeyDown(keyCode, event); 
} 

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { 
     if (bShort) { 
      bShort = false; 
      bLong = false; 
      if (mp != null) { 
       //HERE IS WHERE I WANT TO CALL THE VOLUME-UP ACTION 
      } 
      return true; 
     } 
    } 
    return super.onKeyUp(keyCode, event); 
} 

@Override 
public boolean onKeyLongPress(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { 
     if (bRunning && mp != null) { 
      playNextSong(); 
     } 
     bShort = false; 
     bLong = false; 
     return true; 
    } 
    return super.onKeyLongPress(keyCode, event); 
} 
+0

你解決了嗎?我正在嘗試開發一個應用程序來跳過帶有音量按鈕的曲目。你能幫我嗎? – 2014-07-24 14:47:19

回答

3

看看,也許這會幫助你。

public boolean dispatchKeyEvent(KeyEvent event) { 
     int action = event.getAction(); 
     int keyCode = event.getKeyCode(); 

     switch (keyCode) { 
     case KeyEvent.KEYCODE_VOLUME_UP: 
      if (action == KeyEvent.ACTION_DOWN && event.isLongPress()) { 
      //(skipping a song) 
      } 
      if (action == KeyEvent.ACTION_UP) {   
      //(vol up) 
      } 
      return true; 
    case KeyEvent.KEYCODE_VOLUME_DOWN: 
     if (action == KeyEvent.ACTION_UP) 

     return true; 
    default: 
     return super.dispatchKeyEvent(event); 
    } 
} 
+0

太棒了,甚至不需要那麼多,只需要抓住「if(action == KeyEvent.ACTION_DOWN && event.isLongPress())」並在這種情況下返回true。音量提高由super.dispatchKeyEvent(event)處理。 而且我可以清理一大堆亂七八糟的代碼!謝謝! – tofkop 2013-02-19 14:24:32

+0

我很高興能夠幫助^^ – 2013-02-19 14:36:49

相關問題