5

使用下面的代码,我已经停止使用音量按钮,除非我正在流式传输音频(否则它会烦人地改变铃声音量),但“返回”按钮不起作用。

按“返回”应该会进入我的手机桌面(或退出我的应用程序,如您所料),但它没有做任何事情。如果我打开菜单,“返回”将按原样关闭菜单,但我无法离开应用程序。

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

@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

4 回答 4

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。

于 2011-03-26T23:09:47.667 回答
5

让音量键始终控制媒体音量的一种更简单、更可靠的方法是将此行插入到您的 Activity 中onCreate()

setVolumeControlStream(AudioManager.STREAM_MUSIC);
于 2011-03-27T01:10:34.287 回答
4

伙计,只需将该活动的音频上下文更改为媒体音量:

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;
    }
}
于 2011-03-27T00:17:48.540 回答
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;

}
于 2016-04-28T07:16:56.607 回答