【问题标题】:Click twice on play button of videoview for resume video在 videoview 的播放按钮上单击两次以恢复视频
【发布时间】:2016-09-14 13:41:00
【问题描述】:

This is my VideoplayerActivity:

public class VideoPlayerActivity extends Activity {
    CustomVideoView video_player_view;
    DisplayMetrics dm;
    SurfaceView sur_View;
    MediaController media_Controller;
    AlertDialog alertDialog;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.video_view);
        if (getIntent().getData() != null && getIntent().getData().getPath() != null) {
            getInit(getIntent().getData().getPath());
        }
        if (getIntent().hasExtra("file_path")) {
            getInit(getIntent().getStringExtra("file_path"));
        }
    }

    public void getInit(String file_path) {
        video_player_view = (CustomVideoView) findViewById(R.id.video_player_view);
        media_Controller = new MediaController(this);
        video_player_view.setPlayPauseListener(new CustomVideoView.PlayPauseListener() {

            @Override
            public void onPlay() {
                if (alertDialog != null) {
                    alertDialog.dismiss();
                }
            }

            @Override
            public void onPause() {
                alertDialog = new AlertDialog.Builder(VideoPlayerActivity.this).create();
                alertDialog.setMessage("Video has been paused");
                alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        alertDialog.dismiss();

                    }
                });
                alertDialog.show();
            }
        });

        video_player_view.setMediaController(media_Controller);
        video_player_view.setVideoPath(file_path);
        video_player_view.start();
    }
}

这是我的CustomVideoView

public class CustomVideoView extends VideoView {

    private PlayPauseListener mListener;

    public CustomVideoView(Context context) {
        super(context);
    }

    public CustomVideoView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomVideoView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public void setPlayPauseListener(PlayPauseListener listener) {
        mListener = listener;
    }

    @Override
    public void pause() {
        super.pause();
        if (mListener != null) {
            mListener.onPause();
        }
    }

    @Override
    public void resume() {
        super.resume();
        if (mListener != null) {
            mListener.onPlay();
        }
    }

    @Override
    public void start() {
        super.start();
        if (mListener != null) {
            mListener.onPlay();
        }
    }

    public static interface PlayPauseListener {
        void onPlay();
        void onPause();
    }

}

问题是,当我第一次点击恢复视频时,它会关闭警报对话框,第二次点击它恢复我的视频。 我希望它在单击时发生,请帮助我完成此操作。

【问题讨论】:

    标签: android


    【解决方案1】:

    这是我测试过的,似乎有效!来自this post

    public void getInit(String file_path) {
        video_player_view = (CustomVideoView) findViewById(R.id.video_player_view);
        media_Controller = new MediaController(this);
        video_player_view.setPlayPauseListener(new CustomVideoView.PlayPauseListener() {
    
            @Override
            public void onPlay() {
                if (alertDialog != null) {
                    alertDialog.dismiss();
                }
            }
    
            @Override
            public void onPause() {
                alertDialog = new AlertDialog.Builder(VideoPlayerActivity.this).create();
                alertDialog.setMessage("Video has been paused");
                alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        alertDialog.dismiss();
                    }
                });
    
                alertDialog.getWindow()
                        .setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
                                WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
                alertDialog.getWindow()
                        .clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
                alertDialog.show();
            }
        });
    
        video_player_view.setMediaController(media_Controller);
        video_player_view.setVideoPath(file_path);
        video_player_view.start();
    }
    

    【讨论】:

      【解决方案2】:

      所以我不确定显示警报对话框并允许用户单击不在前台的 ui 元素的方法。您可以做的是添加一个关闭侦听器,如果用户在外部触摸时关闭对话框并从那里开始播放,则该侦听器将被调用。

      public void getInit(String file_path) {
          video_player_view = (CustomVideoView) findViewById(R.id.video_player_view);
          media_Controller = new MediaController(this);
          video_player_view.setPlayPauseListener(new CustomVideoView.PlayPauseListener() {
      
              @Override
              public void onPlay() {
                  if (alertDialog != null) {
                      alertDialog.dismiss();
                  }
              }
      
              @Override
              public void onPause() {
                  alertDialog = new AlertDialog.Builder(VideoPlayerActivity.this).create();
                  alertDialog.setMessage("Video has been paused");
                  alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
                      public void onClick(DialogInterface dialog, int which) {
                          alertDialog.dismiss();
                          video_player_view.start();
                      }
                  });
                  .setOnCancelListener(new DialogInterface.OnCancelListener() {
                      @Override
                      public void onCancel(DialogInterface dialog) {
                          video_player_view.start();
                      }
                  });
                  alertDialog.show();
              }
          });
      
          video_player_view.setMediaController(media_Controller);
          video_player_view.setVideoPath(file_path);
          video_player_view.start();
      }
      

      【讨论】:

      • 谢谢先生,但我只想在点击播放按钮时发生,有什么办法吗
      • @puneetkumar 所以你希望用户能够在前台有对话框时点击媒体控制器上的播放?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多