Actualmente estoy tratando de diseñar una aplicación simple que transmita una estación de radio por Internet. Tengo la URL de la estación y estoy configurando el reproductor multimedia como
MediaPlayer mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(URL);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
mediaPlayer.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
El programa no se bloquea cuando se emula, pero no se reproduce nada y aparece el siguiente error:
start called in state 0
y justo debajo está
Error (-38,0)
Alguien sabe que significa esto?
Leí un poco sobre estos errores de estado, pero no pude encontrar nada que se aplique a mi proyecto.
android
android-mediaplayer
SmashCode
fuente
fuente
Respuestas:
Necesita llamar
mediaPlayer.start()
alonPrepared
método usando un oyente. Recibe este error porque está llamandomediaPlayer.start()
antes de que haya alcanzado el estado preparado.Aquí sabrás como podrás hacerlo :
fuente
Parece que el Error -38 significa una excepción de estado (como indica el mensaje de error). Por ejemplo, si llama
start()
, antes de que la canción esté lista, o cuando llamapause()
, incluso si la canción no se reproduce en absoluto.Para solucionar este problema, compruebe el estado de mediaPlayer antes de llamar a los métodos. Por ejemplo:
Además, el MediaPlayer está enviando mensajes de eventos. Incluso si no necesita el evento preparado (aunque sería una buena idea no iniciar la reproducción antes de que se active este evento), debe configurar un oyente de devolución de llamada. Esto también es válido para el
OnErrorListener
,OnCompletionListener
,OnPreparedListener
yOnSeekCompletedListener
(si se llama al método Seek).Los oyentes se pueden adjuntar simplemente
fuente
Recibí este error cuando intentaba obtener la posición actual (MediaPlayer.getCurrentPosition ()) del reproductor multimedia cuando no estaba en el estado preparado. Lo solucioné haciendo un seguimiento de su estado y solo llamando al método getCurrentPosition () después de que se llama a onPreparedListener.
fuente
Este es mi código, probado y funcionando bien:
fuente
Probé el siguiente código. funcionando bien
fuente
SetAudioStreamType(..)
usarSetAudioAttributes(...)
Encontré el mismo problema hace unos días. Mi MediaPlayer de audio funciona bien en dispositivos con alta potencia de procesamiento, pero para dispositivos lentos, el reproductor de medios simplemente no se reprodujo durante algún tiempo y desde LogCat hubo muchas quejas de llamadas en estado incorrecto. Así que decidí que llamando a poner la llamada a start () , pausa () , ... en onPrepared () método de OnPreparedListener () de la siguiente manera:
También intente lanzar cualquier reproductor multimedia que ya no necesite. Por ejemplo, si no desea reproducir el audio o el video en segundo plano, debe llamar a mediaPlayer.release () en onPause () .
fuente
Algunas veces, los archivos están codificados de una manera que Android no puede decodificar. Incluso algunos archivos mp4 no se pueden reproducir. Pruebe con un formato de archivo diferente (.3gp se reproducen la mayor parte del tiempo) y vea ...
fuente
encima de la imagen, puede obtener el camino correcto.
fuente
Obtienes este mensaje en los registros porque haces algo que no está permitido en el estado actual de tu instancia de MediaPlayer.
Por lo tanto, siempre debe registrar un controlador de errores para detectar esas cosas (como sugirió @tidbeck).
Al principio, te aconsejo que eches un vistazo a la documentación de la
MediaPlayer
clase y comprendas lo que significa eso con estados. Ver: http://developer.android.com/reference/android/media/MediaPlayer.html#StateDiagramSu error aquí bien podría ser uno de los comunes, los demás escribieron aquí, pero en general, echaría un vistazo a la documentación de qué métodos son válidos para llamar en qué estado: http://developer.android.com/ reference / android / media / MediaPlayer.html # Valid_and_Invalid_States
En mi ejemplo, fue el método
mediaPlayer.CurrentPosition
que llamé mientras el reproductor multimedia estaba en un estado en el que no estaba permitido llamar a esta propiedad.fuente
Resolví los errores (-19,0) y (-38,0), creando un nuevo objeto de MediaPlayer cada vez antes de jugar y soltándolo después de eso.
Antes de :
}
Después:
}
fuente
fuente
Fue muy frustrado. Entonces, tengo una solución que funciona para mí.
fuente
Para mi esto funcionó
fuente
También recibí este error que probé con onPreparedListener pero aún así recibí este error. Finalmente obtuve la solución de que el error es mi culpa porque olvidé el permiso de Internet en Android Manifest xml. :)
Usé código de muestra para mediaplayer. Utilicé en el método StreamService.java
onCreate
fuente
Me encontré con el mismo problema justo antes, el amigo del primer piso tenía razón, llamaste al
start()
en el momento equivocado, deberías establecer un oyente para prepare () oprepareSync()
con este métodomediaPlayer.setOnPreparedListener(this)
; antes de prepararse, en esta llamada de devolución de llamadastart()
. Puede resolver su problema. Ya lo he intentado.fuente
Soy nuevo en la programación de Android y tuve el mismo error que este. así que simplemente redefiní el mp.createmediaPlayer = MediaPlayer.create (getApplicationContext (), Settings.System.DEFAULT_RINGTONE_URI). Puede que no sea la verdadera forma de hacerlo, pero funcionó con una multa para mí:
fuente
fuente