2015-07-10 41 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); 
    } 
}