Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android-覆盖的音量按钮影响了后退按钮?_Android_Overriding_Volume_Back_Android Audiomanager - Fatal编程技术网

android-覆盖的音量按钮影响了后退按钮?

android-覆盖的音量按钮影响了后退按钮?,android,overriding,volume,back,android-audiomanager,Android,Overriding,Volume,Back,Android Audiomanager,使用下面的代码,我已经停止了音量按钮的使用,除非我正在播放音频(否则它会令人烦恼地改变振铃器的音量),但是“后退”按钮不起作用 按“后退”键应该可以进入我的手机桌面(或者像你所期望的那样退出我的应用程序),但它什么都没做。如果我打开菜单,“后退”将关闭菜单,但我不能离开应用程序 我已将代码复制到我的应用程序中的其他活动中,如果我在我的应用程序中打开另一个活动,因为“后退”按钮不起作用,我无法返回主屏幕:) 为什么会发生这种情况?尚未测试,但我认为您需要包括一个名为super.onKeyDown的

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

按“后退”键应该可以进入我的手机桌面(或者像你所期望的那样退出我的应用程序),但它什么都没做。如果我打开菜单,“后退”将关闭菜单,但我不能离开应用程序

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


为什么会发生这种情况?

尚未测试,但我认为您需要包括一个名为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。

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

编辑:

内部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;
    }
}

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


其他按钮是否受到影响?是否确实要阻止用户更改铃声音量?安卓设备上的正常行为是在没有声音播放时更改振铃器音量,在播放时更改媒体音量,无论您使用的是什么应用程序。这就是用户从过去的经验中期望发生的事情。正如你所拥有的,他们需要关闭你的应用程序来更改铃声音量。如果我是你的用户,我会称之为烦恼,而不是功能。嗨,路易,是的,我同意,但这是一个音频流应用程序,大多数用户告诉我,他们打开应用程序时,点击“收听”(流连接时会有一秒或两秒的暂停)感谢你指出:)这是我最后的工作代码:@Override public boolean onKeyDown(int-keyCode,KeyEvent-event事件){if(keyCode==KeyEvent.keyCode_volume_-UP){if(StreamService.int-PLAY_-STATE==0){return true;}else{return false;}else if(keyCode==KeyEvent.keyCode\u VOLUME\u DOWN){if(StreamService.INT\u PLAY\u STATE==0){return true;}else{return false;}else{super.onKeyDown(keyCode,event);}return false;}裤子,这不是我所说的:)对于其他有相同错误的人,这里是:嗨,谢谢。其他人回答了我原来的问题,但事实上我已经用我的代码换了这个,这是一个更好的方法。谢谢:)
audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
@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;
    }
}
setVolumeControlStream(AudioManager.STREAM_MUSIC);
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;

}