Android - переопределение кнопки «Назад» приводит к тому, что кнопки громкости перестают работать

Я пытаюсь переопределить кнопку «Назад», чтобы остановить аудиоплеер и закрыть активность медиаплеера, но заметил, что кнопки громкости больше не работают. Я предполагаю, что в коде переопределения есть ошибка. 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;
    }
};

person avafab    schedule 28.04.2014    source источник
comment
У меня была такая же проблема, смотрите мой ответ :)   -  person Behnam    schedule 28.04.2014
comment
я обновил ответ, попробуй   -  person W I Z A R D    schedule 28.04.2014


Ответы (4)


Ваша проблема в dispatchKeyEvent():

Вы используете return true для всех HW-ключей, и это останавливает все ключи от ответа,

тогда как вы должны использовать

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);**
}
person Behnam    schedule 28.04.2014
comment
Я понял, что вы имеете в виду, и ваш код позволяет мне использовать кнопки громкости как аспекты, но когда я запускаю действие и нажимаю кнопку «Назад», он вылетает с этим сообщением: Attempt to invoke virtual method 'int android.media.MediaPlayer.getCurrentPosition()' on a null object reference - person avafab; 28.04.2014

Вместо этого вы можете переопределить onBackPressed().

person Seshu Vinay    schedule 28.04.2014

Вы должны использовать вот так

@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();
}

or

@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);
}
person Tulsiram Rathod    schedule 28.04.2014
comment
не работает, я отредактировал код, посмотрите пожалуйста. - person avafab; 28.04.2014

Вы пробовали это проверить, как только это может решить вашу проблему

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

           finish();


    }
person W I Z A R D    schedule 28.04.2014
comment
где ты взял event - person Blackbelt; 28.04.2014
comment
почему вам нужно приводить контекст к Activity. onBackPressed — это метод Activity. Так что отсутствует вызов super.onBackPressed() - person Blackbelt; 28.04.2014
comment
хорошо, это тоже правильно @blackbelt он хочет закончить свою деятельность - person W I Z A R D; 28.04.2014
comment
не работает, я отредактировал код, посмотрите пожалуйста. - person avafab; 28.04.2014