VideoView no reproduce vídeo desde la posición deseada

Estoy utilizando VideoView y buscar barra, pero cuando i seekTo (..) en la posición deseada a través de seekBar reproducir vídeo desde el inicio.

Estoy probando este código:

  Public void onProgressChanged (SeeBBar seekBar, int progreso, boolean fromTouch) {

            MVideoView.seekTo (progreso);
 }

VideoView no tiene un OnSeekCompleteListener() pero puede acceder a MediaPlayer desde el método onPrepared del VideoView y, a continuación, establecer el OnSeekCompleteListener , como esto:

 mVideoView.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mp.setOnSeekCompleteListener(new OnSeekCompleteListener() { @Override public void onSeekComplete(MediaPlayer mp) { //TODO: Your code here } }); } }); 

La llamada a VideoView.seekTo() es un contenedor alrededor de MediaPlayer.seekTo() . Esta función regresa casi inmediatamente aunque la búsqueda real todavía está siendo realizada. Por lo tanto, desea esperar para buscar completar a través de MediaPlayer.OnSeekCompleteListener .

Sin embargo, como Reno mencionado, el estándar VideoView no es compatible con OnSeekCompleteListener .

Pero puede copiar y personalizar localmente la clase VideoView para agregar este soporte usted mismo.

Primero, comience con una copia de VideoView.java . O puede clonar la base de datos completa / base, pero advirtiendo que es más de 1 gig de datos para descargar.

Copie VideoView.java en su proyecto Eclipse Android y comenzará a construir pero fallará. Esto es lo que hice para que se compile:

  1. Actualice la instrucción de paquete para que coincida con su proyecto.
  2. Comentar las referencias a MetaData . La solución para esto está en mi lista de tareas. Estos deben ser reemplazados por llamadas a MediaMetadataRetriever .
  3. Reemplazar mContext con las llamadas a getBaseContext()

Ahora está listo para agregar el código para OnSeekCompleteListener . La implementación es similar a los otros oyentes, es decir OnCompletionListener .

 public class VideoView extends SurfaceView implements MediaPlayerControl { // The client's listener which is the notification callback. private OnSeekCompleteListener mOnSeekCompleteListener; // Set up MediaPlayer to forward notifications to client. private MediaPlayer.OnSeekCompleteListener mSeekCompleteListener = new MediaPlayer.OnSeekCompleteListener() { public void onSeekComplete(MediaPlayer mp) { if (mOnCompletionListener != null) { mOnCompletionListener.onCompletion(mMediaPlayer); } } }; // API for client to set their listener. public void setOnSeekCompleteListener(OnSeekCompleteListener l) { mOnSeekCompleteListener = l; } } 

Finalmente, actualice su propio código:

  1. Actualiza las referencias a android.widget.VideoView para usar tu VideoView personalizado.
  2. Implementar un oyente y establecerlo vía llamando setOnSeekCompleteListener() .

Su código ahora recibe notificaciones cuando la búsqueda se ha completado realmente y luego puede realizar las consultas posteriores.

Usted tiene que esperar para que la búsqueda para completar, por desgracia VideoView no tiene un OnSeekCompleteListener() (¿por qué Google? -_-)

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