Слушатель (или обработчик) для завершения видео
У меня есть следующий код, чтобы проверить воспроизведение видео с удаленного веб-сервера через его URL.
videoView = (VideoView)this.findViewById(R.id.videoView);
MediaController mc = new MediaController(this);
videoView.setMediaController(mc);
videoView.setVideoURI(Uri.parse("http://sayedhashimi.com/downloads/android/movie.mp4"));
videoView.requestFocus();
Код работает отлично, даже в эмуляторе Android. Я просто хотел бы узнать, есть ли какой-нибудь слушатель (или обработчик) для обнаружения окончания воспроизводимого видео?
Обновление:
У меня есть следующий код:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.player);
videoView = (VideoView)this.findViewById(R.id.videoView);
playVideo();
// video finish listener
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// not playVideo
// playVideo();
mp.start();
}
});
}
public void playVideo() {
MediaController mc = new MediaController(this);
videoView.setMediaController(mc);
videoView.setVideoURI(Uri.parse("http://sayedhashimi.com/downloads/android/movie.mp4"));
videoView.requestFocus();
}
Когда действие только что вызывается, видео работает отлично, но когда видео заканчивается, я хотел бы, чтобы он снова воспроизводился, что не происходит.
Ответы
Ответ 1
Кажется, что вы ищете
setOnCompletionListener(MediaPlayer.OnCompletionListener l)
Более подробное объяснение можно найти здесь
ИЗМЕНИТЬ
В этом показано решение, в котором воспроизведение вызывается после завершения с использованием VideoView
, MediaController
и setOnCompletionListener()
.
Ответ 2
вот мой рабочий кусок кода:
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
{
public void onCompletion(MediaPlayer mp)
{
// Do whatever u need to do here
}
});
Ответ 3
vidView=(VideoView)findViewById(R.id.vidView);
vidView.setMediaController(null);
vidView.setVideoPath( "/mnt/external_sd/somerandommovie.3gp" );
vidView.start();
vidView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
vidView.start();
}
});
Я обнаружил, что слушатель стрелял, проблема заключалась в том, что mp.start(), похоже, ничего не делал, поэтому вызов, начинающийся снова на исходном объекте, кажется, работает нормально.
Ответ 4
в вашем слушателе onCompletion, попробуйте использовать videoView.start(); вместо mp.start();
Ответ 5
Убедитесь, что вы используете плеер в основном потоке, кажется, что обратный вызов работает только в основном потоке.