2013-04-11 12 views
8

Come rilevare se VideoView sta riproducendo video o Buffering?
Desidero visualizzare un popup che dice che il video è in fase di buffering.Come rilevare se VideoView sta riproducendo video o Buffering?

Nel livello 17 dell'API Android è presente una richiamata setOnInfoListener che può fornirmi questa informazione ma sto utilizzando il livello API 15 (Android ICS).

Ho anche visto questa domanda "Detect if a VideoVIew is buffering" ma la soluzione suggerita è per MediaPlayer e non per VideoView.

SO come posso rilevare se VideoView sta eseguendo il buffering? è una buona soluzione per eseguire un thread per controllare il livello di ricerca/avanzamento corrente e, a seconda di ciò, decidere se il video è in riproduzione o buffering.

UPDATE

Non è come ho solo bisogno di controllare se il video è in riproduzione o il buffering all'inizio del solo il video, voglio controllare attraverso il video di pagare.

risposta

11

Per verificare se VideoView sta giocando è non è possibile utilizzare il metodo isPlaying(),

if (videoView.isPlaying()) 
{ 
    // Video is playing 
} 
else 
{ 
    // Video is either stopped or buffering 
} 

Per controllare l'uso, se VideoView è completato seguente,

videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
{ 
    @Override 
    public void onCompletion(MediaPlayer mp) 
    { 
      // Video Playing is completed 
    } 
}); 
+0

altro video è in pausa, ma grazie per la vostra idea – vuhung3990

+0

Abbiamo bisogno di aggiungere 'videoView.isPlaying()' per un timer di mantenere il controllo se il video è buffering o abbiamo bisogno di impostare il 'setOnBufferingUpdateListener' per verificare se è in modalità buffering. – User7723337

1
  videoView.setOnPreparedListener(new OnPreparedListener() 
      { 

       public void onPrepared(MediaPlayer mp) 
       {     
        progressDialog.dismiss();  // or hide any popup or what ever 
        videoView.start();   // start the video 
       } 
      }); 
1

Sono venuto con il seguente trucco per non implementare una VideoView personalizzata. L'idea è di controllare ogni 1 secondo se la posizione corrente è la stessa di 1 secondo prima. Se lo è, il video è in buffering. In caso contrario, il video sta davvero giocando.

final Handler handler = new Handler(); 
Runnable runnable = new Runnable() { 
    public void run() { 
     int duration = videoView.getCurrentPosition(); 
     if (old_duration == duration && videoView.isPlaying()) { 
      videoMessage.setVisibility(View.VISIBLE); 
     } else { 
      videoMessage.setVisibility(View.GONE); 
     } 
     old_duration = duration; 

     handler.postDelayed(runnable, 1000); 
    } 
}; 
handler.postDelayed(runnable, 0); 
Problemi correlati