MediaPlayer onCompletion no se llama con precisión

En mi aplicación he creado un reproductor de audio (sólo archivos WAV) con MediaPlayer API. Pero el reproductor no devuelve la llamada a OnCompletion Listener cada vez. A veces da callback pero no cada vez. Estoy haciendo un poco de proceso audio en el archivo del wav, como la inserción y sobrescribir.

¿Es porque falta en el encabezado de audio? ¿Por qué no devuelve la llamada cuando se completa la reproducción?

Asegúrese de que los encabezados del archivo están configurados correctamente. Si somethings en el encabezado falta el callback de callback al onCompletion puede no ocurrir.

Si mediaplayer está jugando un archivo .wav , la búsqueda puede ocurrir correctamente, pero una sacudida estará allí. Por lo tanto, cuando se completa la reproducción habrá un differecnce de 0-1000 ms entre la duración total del archivo y onCompletion respectivamente. Así que si tal situación viene usted debe adivinar que como onColmpletion y hacer lo que quería. Eso es un poco complicado para obtener el onCompletion .

Me enfrenté al mismo problema mientras jugaba un archivo .wav con el reproductor de medios. Esta no es una buena manera de resolver este problema, pero me enfrenté al mismo problema como este cuando estaba teniendo la misma situación. Espero que esto te ayude también en algunos aspectos.

Estás usando el método correcto pero has pasado cualquier código en el "/ / hacer algunas tareas aquí cuando se completa la reproducción" AREA .

Si no, entonces la devolución de llamada no tendrá ningún sentido.

 mMediaPlayer.setOnCompletionListener(new OnCompletionListener() { public void onCompletion(MediaPlayer mp) { Toast.makeText(getApplicationContext(),"Playback Completes", Toast.LENGTH_SHORT).show(); } }); 

Este método hará estallar un Toast al completar la reproducción.

Parece que tienes que llamar a setOnCompletionListener DESPUÉS de llamar a start (). Echa un vistazo aquí: https://stackoverflow.com/a/19555480/1860130

Trabajó para mí.

Para obtener la función onCompletion () llamada debe desactivar el bucle con una llamada mediaPlayer.setLooping (false);

Asegúrese de que MediaPlayer no es una variable local (temporal). Dado que la variable local será recogida por GC. En ese caso, el onCompletion no tendrá ninguna posibilidad de ser invocado.

Trate de usar un método de sueño una vez que se completa la grabación. También utiliza; .prepare () antes de que se produzca el lugar, para evitar accidentes.

  • Guardar la entrada de audio del motor de reconocimiento de voz de Android Stock
  • Cómo simular la entrada de audio a micrófono utilizando el archivo .wav
  • Archivo de audio inverso en Android
  • Cómo codificar un WAV a un mp3 en un dispositivo Android
  • Utilizar AudioTrack en Android para reproducir un archivo WAV
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.