如何在Android上禁用物理卷按钮?

时间:2012-11-21 14:26:05

标签: android

我正在开发一个Android应用程序,我的应用程序会在启动时发出警报,但我想禁用外部音量按钮,这样当手机发出警报时,用户无法关闭警报体积。我已经在Android手机上测试了Android版本2.3.5,但它无法正常工作。以下是我的编码。希望有人可以帮助我......谢谢。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event){

    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP){
        Toast.makeText(this, "Volume Up", Toast.LENGTH_LONG).show();
        return true;
    }

    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){
        Toast.makeText(this, "Volume Down", Toast.LENGTH_LONG).show();
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

3 个答案:

答案 0 :(得分:11)

尝试覆盖dispatchKeyEvent(KeyEvent event)

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    boolean result;
     switch( event.getKeyCode() ) {
        case KeyEvent.KEYCODE_VOLUME_UP:
        case KeyEvent.KEYCODE_VOLUME_DOWN:
            result = true;
            break;

         default:
            result= super.dispatchKeyEvent(event);
            break;
     }

     return result;
}

see this article

答案 1 :(得分:0)

最好的方法是在一个音频流(AudioManager.STREAM_ALARM)上播放闹钟声音,并使音量按钮与另一个音频流(setVolumeControlStream(AudioManager.STREAM_MUSIC);)相关联。 http://developer.android.com/training/managing-audio/volume-playback.html#HardwareVolumeKeys

答案 2 :(得分:0)

只需返回true即可禁用卷操作。 现在您可以通过onVolumeDown()和onVolumeUp()函数执行其他操作。

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

    return true;
    //return super.onKeyDown(keyCode, event);
}