Кнопка возврата Android не работает при воспроизведении видео в VideoView

Кнопка возврата Android не работает при воспроизведении видео в VideoView. Но это работает до воспроизведения видео. Я использую собственный MediaController для VideoView.
Я пытался использовать dispatchKeyEvent, но это не работает.

Код действия, использующего VideoView:

mc = new CustomMediaController(mVideo.getContext(), screenIcon) {

@Override
public void hide(){
}

@Override
public boolean dispatchKeyEvent(KeyEvent event){
     if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
         super.hide();
         ((Activity) getContext()).finish();
         return true;
     }
     return super.dispatchKeyEvent(event);
}
};


@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
   if ((keyCode == KeyEvent.KEYCODE_BACK)) {
     onBackPressed();
     finish();
   }
   return true;
}

@Override
public void onBackPressed() {
  super.onBackPressed();
  finish();
}


CustomMediaController также содержит dispatchKeyEvent:

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
   if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
     ((Activity) getContext()).finish();
   }
   return super.dispatchKeyEvent(event);
}

Также, когда я прокручиваю макет, mediaController не поддерживает свою позицию в videoView. Чтобы устранить эту ошибку, я добавил код для исправления положения mediaController.

FrameLayout f;
RelativeLayout.LayoutParams lp;
RelativeLayout.LayoutParams params;

         params = (RelativeLayout.LayoutParams) mVideo.getLayoutParams();
            params.height = mp.getVideoHeight();
            progress.dismiss();
            f = (FrameLayout) mc.getParent();
            lp = new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
            lp.addRule(RelativeLayout.ALIGN_BOTTOM, mVideo.getId());
            try {
                ((LinearLayout) f.getParent()).removeView(f);
            } catch (Exception e) {
                ((RelativeLayout) f.getParent()).removeView(f);
            }
            ((RelativeLayout) mVideo.getParent()).addView(f, lp);
            //mc.setAnchorView(mVideo);
            mVideo.setLayoutParams(params);

Кнопка «Назад» отлично работает, когда я удаляю этот код выше.

Я рассмотрел следующие вопросы в самом переполнении стека, но не решил свою проблему.

Ссылки на переполнение стека, которые я пробовал:

Кнопка возврата Android и MediaController
Кнопка "Назад" не будет работать, когда VideoView воспроизводит видео
Первое нажатие кнопки "Назад" не перехватывается при воспроизведении видео на Android
Проблема с кнопкой "Назад" в VideoView


person Anooj Krishnan G    schedule 06.04.2016    source источник
comment
@NarendraBaratam: я отредактировал свой вопрос. Также предоставил код.   -  person Anooj Krishnan G    schedule 06.04.2016
comment
где ваш onBackpressed(); в этой деятельности??? Вы это отменили???   -  person Narendra Baratam    schedule 06.04.2016
comment
@NarendraBaratam: да. Я пробовал onKeyDown и onBackPressed. Я пытался закончить деятельность там.   -  person Anooj Krishnan G    schedule 06.04.2016
comment
вам нужно освободить () носитель там ... и остановить () ... перед вызовом super.onBackPressed () в onBackPressed ()   -  person Narendra Baratam    schedule 06.04.2016
comment
@NarendraBaratam: Можете ли вы рассказать мне об использовании? mVideo.suspend(); ?. Я не видел метод выпуска для просмотра видео. Но я думаю, что suspend внутренне выполняет операцию освобождения.   -  person Anooj Krishnan G    schedule 06.04.2016
comment
Давайте продолжим обсуждение в чате.   -  person Anooj Krishnan G    schedule 06.04.2016
comment
не могли бы вы решить эту проблему?? у меня такая же ситуация   -  person hvar90    schedule 14.08.2020


Ответы (1)


После переопределения dispatchKeyEvent() в моем медиаконтроллере он работает нормально

 mediaController=new MediaController(this){
        @Override
        public void hide() {
            mediaController.show();
        }
        @Override
        public boolean dispatchKeyEvent(KeyEvent event){
            if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
                super.hide();
                ((Activity) getContext()).finish();
                return true;
            }
            return super.dispatchKeyEvent(event);
        }
    };

    videoView.setMediaController(mediaController);
person Ranjith Kumar    schedule 21.03.2019