android - 覆盖后退按钮导致音量按钮停止工作

时间:2014-04-28 10:44:01

标签: android android-activity android-mediaplayer android-button android-event

我试图覆盖后退按钮以停止音频播放器并关闭媒体播放器活动,但我注意到音量按钮不再起作用。我想在重写代码时会出错。 PS。在我的MediaController中,我覆盖hide()方法以始终显示控件。

mediaController = new MediaController(this)

{
    @Override
    public void hide() {
        // TODO Auto-generated method stub
        //do nothing
    }


    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {

        if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) {

            if (mediaPlayer != null) {
                mediaPlayer.reset();
                mediaPlayer.release();
                mediaPlayer = null;

            }
            super.hide();

            Activity a = (Activity)getContext();
            a.finish();

        }
        return true;
    }
};

4 个答案:

答案 0 :(得分:4)

您的问题出在dispatchKeyEvent():

您正在使用return true用于所有硬件密钥,这会阻止所有密钥响应,

而你应该使用

return super.dispatchKeyEvent(event);

对于Back Key以外的其他键。

所以你的代码应该是这样的:

@Override
    public boolean dispatchKeyEvent(KeyEvent event) {
    if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) {

        if (mediaPlayer != null) {
            mediaPlayer.reset();
            mediaPlayer.release();
            mediaPlayer = null;
        } 

        finish();
        return true;
    }
    **return super.dispatchKeyEvent(event);**
}

答案 1 :(得分:2)

您可以覆盖onBackPressed()

答案 2 :(得分:2)

你应该这样使用

@Override
    public boolean dispatchKeyEvent(KeyEvent event) {

        if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) {

            if (mediaPlayer != null) {
                mediaPlayer.reset();
                mediaPlayer.release();
                mediaPlayer = null;
            } 

            finish();
            return true;
        }
        return false;
    }

从方法中输出代码或尝试:

@Override
public void onBackPressed() {
     if (mediaPlayer != null) {
          mediaPlayer.reset();
          mediaPlayer.release();
          mediaPlayer = null;
     } 
   finish();
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
         if (mediaPlayer != null) {
                mediaPlayer.reset();
                mediaPlayer.release();
                mediaPlayer = null;
            } 

           finish();
           return true;
    }

    return super.onKeyDown(keyCode, event);
}

答案 3 :(得分:0)

一旦它可以解决您的问题,您是否尝试过检查

@Override
    public void onBackPressed() {
         if (mediaPlayer != null) {
                mediaPlayer.reset();
                mediaPlayer.release();
                mediaPlayer = null;
            } 

           finish();


    }