2015-07-10 40 views
0

我的應用程序中有以下代碼。只要音量按鈕保持按下狀態,我就會得到ACTION_DOWN,但是當我釋放它時,我希望得到ACTION_UP。這不會發生。爲什麼?它可能是我的LG G2(棒棒糖)上的錯誤?我需要的只是爲VolumeUp按鈕操作添加一個監聽器。增大音量按鈕在發佈時不提供動作

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { 
     if (event.getAction() == KeyEvent.ACTION_UP) { 
      //TODO 
      Log.d(TAG,"VOL UP"); 
      return true; 
     } 

     if (event.getAction() == KeyEvent.ACTION_DOWN) { 
      //TODO 
      Log.d(TAG,"VOL DOWN"); 
      return true; 
     } 

     Log.d(TAG,String.valueOf(keyCode)); 

     return true; 
    } 

    return super.onKeyDown(keyCode, event); 
} 
+1

你應該使用'@覆蓋公共布爾的onkeyup(INT的keyCode,KeyEvent的事件){...}'來跟蹤關鍵了 – zzas11

+0

謝謝@ zzas11!有用!我認爲onKeyDown()方法還提供了一個關於按鈕釋放的事件... –

+0

不客氣。您可以參考Android API文檔:http://developer.android.com/reference/android/view/KeyEvent.Callback.html – zzas11

回答

0

在這裏,我編輯兩個代碼可能是你的作品之一:

代碼1:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || 
     keyCode == KeyEvent.KEYCODE_VOLUME_UP) { 
     changeColor(keyCode); 

     return true; 
    } 

    return super.onKeyDown(keyCode, event); 
} 

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || 
     keyCode == KeyEvent.KEYCODE_VOLUME_UP) { 
     // do nothing              

     return true; 
    } 

    return super.onKeyUp(keyCode, event); 
} 

代碼2:

public boolean dispatchKeyEvent(KeyEvent event) { 

    if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP) {    
      return true; 
    } else if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN) { 
      return true; 
    } 
    return dispatchKeyEvent(event); 
} 
+1

您是否理解這個問題? –

+1

@GekaK,我理解你的問題:) –

+0

謝謝Darshan –

0

你應該試圖捕捉所有的行動。

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) { 
      //TODO 
     } 
     return true; 
    case KeyEvent.KEYCODE_VOLUME_DOWN: 
     if (action == KeyEvent.ACTION_DOWN) { 
      //TODO 
     } 
     return true; 
    default: 
     return super.dispatchKeyEvent(event); 
    } 
}