VideoView en bucle de videos Replenish

Tengo una aplicación con un VideoView que mantendrá el bucle el mismo video una y otra vez hasta que un usuario hace algo al dispositivo (pantalla táctil, etc) Actualmente estoy usando el OnCompletionListener () para reiniciar el video una vez que termina. Esto funciona correctamente en todos los dispositivos que he probado, excepto en el Samsung Replenish.

Aquí está mi código:

mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { public void onCompletion(MediaPlayer mp) { mVideoView.setVideoPath(file.getAbsolutePath()); mVideoView.start(); } }); 

Lo que sucede en el Replenish es que el video se reproduce todo el camino a través de una vez, pero luego nunca se inicia de nuevo y la pantalla se vuelve todo negro (Pero la luz de fondo sigue encendida). En todos los otros dispositivos que he probado con este código exacto que ha trabajado para repetir el video. ¿Alguien sabe de algo específico sobre el Replenish que podría causar este error? Pensé que tal vez retrasar las llamadas a setVideoPath (), y start () por 200-300ms podría ayudar, pero que no tenía ningún efecto. Estoy realmente en una pérdida aquí.

Estoy viendo estos mensajes en mi registro:

ERROR / QCvdec (87): Omx Flush emitido cuando vdec no se inicializa todavía.

ERROR / QCvdec (87): OMXCORE-SM: comando recibido DISABLE (2)

ERROR / QCvdec (87): Omx Flush emitido cuando vdec no se inicializa todavía.

ERROR / QCvdec (87): OMXCORE-SM: Comando recibido ENABLE (3)

Pero estos registros están ocurriendo tanto cuando se inicia el vídeo (la primera vez que se reproduce) como cuando no se puede iniciar de nuevo. Así que no estoy seguro de si están relacionados con mi problema

Editar:

Acabo de intentar establecer mVideoView a null, y luego obtener una nueva referencia a ella con findViewById () justo antes de setVideoPath (). Sé que esto complicaría la forma en que se configura OnCompletionListener. Pero independientemente de que no funcionó de todos modos, sigue siendo la misma pantalla oscura.

Editar 2:

He empezado a notar que a veces el video ni siquiera comienza la primera vez. Estoy usando estas mismas dos líneas para ponerlo en marcha la primera vez:

  mVideoView.setVideoPath(file.getAbsolutePath()); mVideoView.start(); 

Parece que empieza con más consistencia, pero no del todo al 100% cuando es la primera vez que se está jugando.

Editar 3: Así es como lo tengo configurado ahora. Estoy configurando manualmente OnPreparedListener para iniciar el video para mí. Así que agregué esto a mi onCreate ()

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

Entonces, cuando estoy listo para reiniciar el video que acaba de llamar sólo el método setVideoPath (), así:

 mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { public void onCompletion(MediaPlayer mp) { mVideoView.setVideoPath(file.getAbsolutePath()); } }); 

Esto parece estar haciendo el truco. Lo estoy dejando funcionar por un rato para descubrir para seguro sin embargo.

Editar 4:

@MByD En el código para VideoView setVideoPath () es un contenedor para setVideoUri (). SetVideoURI () está configurando mStartWhenPrepared = false; El OnPreparedListener predeterminado comprueba este conmutador para decidir si se debe iniciar la reproducción o no. Es por eso que no se inicia con el oyente predeterminado. No he mirado en él más que eso, pero puede haber un método del setter que me deja cambiar el valor mStartWhenPrepared a la verdad, que haría el vídeo ser comenzado del listener del defecto.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.