代码之家  ›  专栏  ›  技术社区  ›  Christian

在Android上接管音量键

  •  6
  • Christian  · 技术社区  · 15 年前

    我想把音量调高调低。目前我的代码是:

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    
        Log.v(TAG, event.toString());
        if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){
            mLamp.moveBackward();
    
            return false;
        }
        else if(keyCode == KeyEvent.KEYCODE_VOLUME_UP){
            mLamp.moveForward();
    
            return false;
        }
    
        return true;
    }
    public boolean onKeyUp(int keyCode, KeyEvent event) {
    
        Log.v(TAG, event.toString());
        if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){
            return false;
        }
        else if(keyCode == KeyEvent.KEYCODE_VOLUME_UP){
            return false;
        }
    
        return true;
    }
    

    这会触发 mLamp.moveBackward() mLamp.moveForward() 但它仍然会改变铃声的音量。 我该怎么做才能保证响铃的响度不变?

    3 回复  |  直到 15 年前
        1
  •  19
  •   Adil Shaikh    11 年前

    如果您处理了事件,请返回 true . 如果你想让事件 false

        2
  •  8
  •   vor23    12 年前

    如果您处理了事件,那么返回true是很重要的,但是如果您没有处理事件,那么最好确保事件仍然由超类处理。以下是我的应用程序中的一些代码:

    @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);
    }
    

    在我的例子中,超类调用是必要的,这样我的设备上的其他硬件按钮就可以继续工作。

        3
  •  -2
  •   rijoviany    12 年前
    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);
    }