【问题标题】:Android back button not working while playing video in VideoView在 VideoView 中播放视频时,Android 后退按钮不起作用
【发布时间】:2016-07-26 08:34:26
【问题描述】:

在 VideoView 中播放视频时,Android 后退按钮不起作用。但它在播放视频之前有效。我正在为 VideoView 使用自定义 MediaController。
我尝试使用 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 back button and MediaController
Back button won't work when VideoView is playing video
First Back button press not caught when playing a video android
Problem with back button in VideoView

【问题讨论】:

  • @NarendraBaratam:我已经编辑了我的问题。还提供了代码。
  • 你的 onBackpressed() 在哪里;在那个活动中???你重写了吗???
  • @NarendraBaratam:是的。我尝试了 onKeyDown 和 onBackPressed。我试图在那里完成活动。
  • 你必须在 onBackPressed() 中调用 super.onBackPressed() 之前释放()媒体。
  • @NarendraBaratam:你能告诉我用法吗? mVideo.suspend(); ?.我没有看到 videoview 的发布方法。但是我猜在内部暂停会执行释放操作。

标签: android android-videoview back-button mediacontroller


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 2013-05-18
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多