2012-02-01 17 views
8

Ho un'applicazione con un VideoView, al fine di rendere la riproduzione del video su un loop Io uso un onCompletionListner chiamare setVideoPath() ancora una volta, in questo modo:Android VideoView ripetizione

mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer arg0) { 
      mVideoView.start(); 

     } 
    }); 


    mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
     public void onCompletion(MediaPlayer mp) { 
       //I have a log statment here, so I can see that it is making it this far. 
       mp.reset(); // <--- I added this recently to try to fix the problem 
       mVideoView.setVideoPath(file.getAbsolutePath()); 
     } 
    }); 

Questa messa a punto funziona bene su tutti i dispositivi che ho incontrato finora, non ho mai avuto problemi con esso, non ripetendo.

Tuttavia il Motorola Xoom su cui sto effettuando i test è stato recentemente aggiornato a ICS. Ora che è su ICS, funzionerà per un po 'e farà un loop del video. Ma alla fine (ho aggiunto un contatore e alcuni log, non sembra esserci alcun motivo per quante volte ha fatto il ciclo con successo prima di fermarsi) uscirà dal ciclo e siederà semplicemente su un fermo immagine del primo fotogramma del film.

Qualcuno sa che cosa potrebbe causare che questo non si verifichi più correttamente? O qualcuno sa di un altro modo per far funzionare correttamente un VideoView che funziona ancora sotto ICS?

+0

Che cos'è mp sul tuo codice? –

+0

@jeraldov 'mp' è l'oggetto MediaPlayer che viene passato come parametro al metodo onCompletion(). – FoamyGuy

risposta

10

Se si dispone di un solo video, è possibile impostare il collegamento (vero) nel listener preparato.

myVideoView.setOnPreparedListener(new OnPreparedListener() { 

     @Override 
     public void onPrepared(MediaPlayer mp) { 
      // TODO Auto-generated method stub 
      mp.setLooping(true); 

     } 
    }); 

e il gioco è fatto.

3

Finora questo:

mp.reset(); 

all'interno del callback onComplete sembra risolvere il problema. Sarebbe molto interessato se qualcuno potesse spiegare cosa sta succedendo.

+1

vuoi dire suCompletion? – Adi

Problemi correlati