Cómo detectar cuando VideoView comienza a reproducir (Android)?

Aquí está el problema, quiero cambiar el botón de reproducción para pausar el botón cuando la secuencia de vídeo comienza a reproducir en videoview pero no sé cómo detectar ese evento?

Terminé usando VideoView.setOnPreparedListener. Esto fue suficiente para cubrir mi problema (botón de reproducción cambiable para pausar)

Hay un gran artículo sobre MediaPlayer aquí – http://www.malmstein.com/blog/2014/08/09/how-to-use-a-textureview-to-display-a-video-with-custom- Media-player-controles /

Puede configurar infoListener en su VideoView

setOnInfoListener(new MediaPlayer.OnInfoListener() { @Override public boolean onInfo(MediaPlayer mp, int what, int extra) { if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) { // Here the video starts return true; } return false; } 

Por lo que sé, no hay ningún evento enviado cuando el video empieza a jugar en VideoView, pero puedo pensar en dos opciones:

  1. Cree una versión de VideoView por usted mismo, que envíe el evento en esos casos.
  2. Utilice MediaController (que es el predeterminado en VideoView)

Si desea seguir la opción uno – puede obtener la fuente de VideoView desde aquí

La respuesta aceptada aquí no es 100% exacta.

A veces onprepared es la llamada 3 segundos antes de que el primer cuadro esté siendo rendido. Sugiero tener una devolución de llamada en ese evento (MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START)

  mMediaPlayer.setOnInfoListener(new MediaPlayer.OnInfoListener() { @Override public boolean onInfo(MediaPlayer mediaPlayer, int i, int i1) { if (i == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START){ //first frame was bufered - do your stuff here } return false; } }); 

Consulte la documentación de medios documantaion para obtener más devoluciones de llamada de info / warning: https://developer.android.com/reference/android/media/MediaPlayer.html#MEDIA_INFO_VIDEO_RENDERING_START

IsPlaying () se puede llamar para comprobar si el objeto MediaPlayer está en el

Android MediaPlayer.isPlaying ()

Otra forma de detectar si videoview comenzó es usar videoView.getCurrentPosition (). GetCurrentPosition () devuelve 0 si la transmisión no se ha iniciado.

  protected Runnable playingCheck = new Runnable() { public void run() { while (true) { if (vw.getCurrentPosition() != 0) { // do what you want when playing started break; } else { try { Thread.sleep(250); } catch (InterruptedException e) { e.printStackTrace(); } } } } }; 

Luego llame:

 new Thread(playingCheck).start(); 

Por favor, pruebe esto:

 final Handler h = new Handler(); h.postDelayed( new Runnable() { public void run() { if (videoView.getCurrentPosition() != 0) { ((ProgressBar) rootView.findViewById(R.id.pgStreaming)).setVisibility(View.GONE); } else { h.postDelayed(this, 250); } } }, 250); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.