2013-04-11 17 views
8

Jak wykryć, czy VideoView odtwarza wideo lub Buforowanie?
Chcę wyświetlić wyskakujące okienko z informacją o buforowaniu wideo.Jak wykryć, czy VideoView odtwarza wideo lub Buforowanie?

Na poziomie 17 interfejsu Android API istnieje oddzwonienie setOnInfoListener, które może dostarczyć mi tych informacji, ale używam poziomu API 15 (Android ICS).

Też widziałem to pytanie "Detect if a VideoVIew is buffering", ale sugerowane rozwiązanie jest dla MediaPlayer, a nie dla VideoView.

W jaki sposób mogę wykryć, czy VideoView buforuje? czy jest to dobre rozwiązanie, aby uruchomić wątek, aby sprawdzić bieżący poziom wyszukiwania/postępu i w zależności od tego zdecydować, czy odtwarzanie wideo lub buforowanie.

UPDATE

To nie jest tak po prostu trzeba sprawdzić, czy film jest odtwarzany lub buforowanie na początku tylko wideo, chcę sprawdzić, przechodzące wideo płacenia.

Odpowiedz

11

Aby sprawdzić, czy VideoView gra to nie można użyć metody jego isPlaying(),

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

Aby sprawdzić, czy VideoView jest wypełniony stosowanie następujących,

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

indziej wideo jest wstrzymane, ale dziękuję za pomysł – vuhung3990

+0

Musimy dodać 'videoView.isPlaying()' aby timer do ciągłego sprawdzania, czy film jest buforowanie lub musimy ustawić 'setOnBufferingUpdateListener' aby sprawdzić, czy jest w trybie buforowania. – 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

I dołączonej następujący hack, aby nie zaimplementować niestandardowego VideoView. Chodzi o to, aby sprawdzać co 1 sekundę, czy aktualna pozycja jest taka sama jak 1 sekundę wcześniej. Jeśli tak, wideo jest buforowane. Jeśli nie, wideo naprawdę gra.

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); 
Powiązane problemy