J'ai implémenté le code suivant afin de tester la lecture d'une vidéo à partir d'un serveur Web distant via son 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();
Le code fonctionne très bien, même dans l'émulateur Android. Je voudrais juste savoir s'il y a un auditeur (ou un gestionnaire) pour détecter la fin de la vidéo en cours de reproduction.
J'ai le code suivant maintenant:
@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();
}
Lorsque l'activité vient d'être appelée, la vidéo fonctionne bien, mais lorsque la vidéo est terminée, j'aimerais qu'elle soit rejouée, ce qui n'est pas le cas.
On dirait que tu cherches
setOnCompletionListener(MediaPlayer.OnCompletionListener l)
Des explications plus détaillées peuvent être trouvées ici
Ceci montre une solution dans laquelle la lecture est appelée après l'achèvement en utilisant VideoView
, MediaController
et setOnCompletionListener()
.
voici mon morceau de code de travail:
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
{
public void onCompletion(MediaPlayer mp)
{
// Do whatever u need to do here
}
});
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();
}
});
J'ai trouvé que l'auditeur était en train de tirer, le problème était que mp.start () ne semblait rien faire, donc appeler à nouveau l'objet initial semble bien fonctionner.
dans votre écouteur onCompletion, essayez d’utiliser videoView.start (); au lieu de mp.start ();
Assurez-vous que vous utilisez le lecteur sur le fil principal, il semble que le rappel ne fonctionne que sur le fil principal.