Android: onSeekCompleteListener с VideoView - PullRequest
       16

Android: onSeekCompleteListener с VideoView

5 голосов
/ 26 октября 2011

Я использую VideoView для воспроизведения видеофайлов.Я использую функцию seekTo для воспроизведения видео с того места, где оно было остановлено.Тем не менее, я хотел сделать некоторые операции, когда операция поиска завершена.Для этого мне нужно использовать onSeekCompleteListener;однако onSeekCompleteListener не поддерживается с VideoView;может использоваться с MediaPlayer.Мой вопрос заключается в том, что "есть ли какой-нибудь способ, которым я могу использовать onSeekCompleteListener" с VideoView?

Большое спасибо

Ответы [ 3 ]

18 голосов
/ 24 мая 2013

Нет необходимости создавать пользовательский VideoView.

. Вы можете получить доступ к MediaPlayer из onPrepared метода VideoView, а затем установить OnSeekCompleteListener, например так:

mVideoView.setOnPreparedListener(new OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {

        mp.setOnSeekCompleteListener(new OnSeekCompleteListener() {
            @Override
            public void onSeekComplete(MediaPlayer mp) {
                //TODO: Your code here
            }
        });

    }
});
9 голосов
/ 02 февраля 2012
public class ObservableVideoView extends VideoView
{

private IVideoViewActionListener mVideoViewListener;
private boolean mIsOnPauseMode = false;

public interface IVideoViewActionListener
{
    void onPause();
    void onResume();
    void onTimeBarSeekChanged(int currentTime);
}

public void setVideoViewListener(IVideoViewActionListener listener)
{
    mVideoViewListener = listener;
}

@Override
public void pause()
{
    super.pause();

    if (mVideoViewListener != null)
    {
        mVideoViewListener.onPause();
    }

    mIsOnPauseMode = true;
}

@Override
public void start()
{
    super.start();

    if (mIsOnPauseMode)
    {
        if (mVideoViewListener != null)
        {
            mVideoViewListener.onResume();
        }

        mIsOnPauseMode = false;
    }
}

@Override
public void seekTo(int msec)
{
    super.seekTo(msec);

    if (mVideoViewListener != null)
    {
        mVideoViewListener.onTimeBarSeekChanged(msec);
    }
}

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

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

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

}

вы можете прослушивать такие события:

public class VideoPlayerActivity extends Activity
{
public static final String VIDEO_URL = "VideoUrl";
private String path = "";
private ObservableVideoView mVideoView;

@Override
public void onCreate(Bundle icicle)
{
    super.onCreate(icicle);
    setContentView(R.layout.video_player_activity_layout);
    mVideoView = (ObservableVideoView) findViewById(R.id.videoView1);
    mVideoView.setMediaController(new MediaController(this));
    mVideoView.setVideoViewListener(mVideoViewListener);


    path = getIntent().getStringExtra(VIDEO_URL);       
    if (path == "")
    {
        Toast.makeText(this, "Please edit VideoViewDemo Activity, and set path" + " variable to your media file URL/path", Toast.LENGTH_LONG)
                .show();
    }
    else
    {   
        mVideoView.setVideoPath(path);
        mVideoView.requestFocus();
        mVideoView.start();
    }
}

private IVideoViewActionListener mVideoViewListener = new IVideoViewActionListener()
{
    @Override
    public void onTimeBarSeekChanged(int currentTime)
    {
        //TODO what you want
    }

    @Override
    public void onResume()
    {
        //TODO what you want
    }

    @Override
    public void onPause()
    {
        //TODO what you want
    }
};

}

1 голос
/ 13 августа 2012

Фархан, вы правы, onSeekCompleteListener не поддерживается VideoView.

Но вы можете скопировать и локально настроить класс VideoView, чтобы добавить эту поддержку самостоятельно.

Я показываю, как это сделать в моем ответе на 7990784 .

...