android - 重写的音量按钮是否影响了后退按钮?

时间:2011-03-26 23:04:22

标签: android override volume back android-audiomanager

使用下面的代码我已停止使用音量按钮,除非我正在播放音频(否则会令人烦恼地改变铃声音量),但“后退”按钮不起作用。

按'返回'应该到我的手机桌面(或退出我的应用程序,就像你期望的那样),但它没有做任何事情。如果我打开菜单,“返回”将关闭菜单,但我不能离开应用程序。

如果我在我的应用程序中打开另一个活动,我已将代码复制到我的应用程序中的其他活动,因为“后退”按钮不起作用,我无法返回主屏幕:)

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    //Suppress the use of the volume keys unless we are currently listening to the stream
    if(keyCode==KeyEvent.KEYCODE_VOLUME_UP) {
        if(StreamService.INT_PLAY_STATE==0){
            return true;
        }else{
            return false;
        }
    }
    if(keyCode==KeyEvent.KEYCODE_VOLUME_DOWN) {
        if(StreamService.INT_PLAY_STATE==0){
            return true;
        }else{
            return false;
        }
    }
return false;

为什么会这样?

4 个答案:

答案 0 :(得分:5)

没有经过测试,但我认为你需要在你调用super.onKeyDown时包含一个else,即:

if(keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
   code
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
   more code
} else {
   super.onKeyDown(keyCode, event);
}

否则,您将捕获所有密钥代码并在检查卷代码后返回false。

答案 1 :(得分:5)

让音量键始终控制媒体音量的一种更简单,更健壮的方法是将此行插入到您的活动onCreate()中:

setVolumeControlStream(AudioManager.STREAM_MUSIC);

答案 2 :(得分:3)

老兄,只需将该活动的音频上下文更改为媒体卷:

http://developer.android.com/reference/android/media/AudioManager.html

编辑:

private AudioManager audio;

在onCreate中:

audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

覆盖onKeyDown:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    switch (keyCode) {
    case KeyEvent.KEYCODE_VOLUME_UP:
        audio.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
        return true;
    case KeyEvent.KEYCODE_VOLUME_DOWN:
        audio.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
        return true;
    default:
        return false;
    }
}

答案 3 :(得分:0)

public boolean onKeyDown(int keyCode, KeyEvent event) {

    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
        //your code
        return true;

    } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
        //your code
        return true;
    } else {

        super.onKeyDown(keyCode, event);
    }


    return true;

}