studio - api 19 android
MediaPlayer: debería tener el controlador de subtítulos ya configurado: KitKat (5)
Esto debería solucionar su problema (lo hice por mí): reemplace la línea que dice "player.start ()" siguiendo el resto de su código con una devolución de llamada asíncrona como esta:
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
}
});
Este error es solo un Log.e, no es un error real. No debería hacer que tu jugador no juegue, supongo que es solo porque el jugador no se había terminado de preparar cuando intentas llamar a start ().
E/MediaPlayer﹕ Should have subtitle controller already set
Tengo un problema extraño en el que mi archivo de audio a veces se reproduce y, a veces, no se reproduce. El truco es que cuando decide no jugar, el DDMS me da un:
E/MediaPlayer﹕ Should have subtitle controller already set
Debido a que este es uno a uno con la música no sonando, he determinado que este es probablemente el problema ...
Si la música no se está reproduciendo y presiono el botón de volumen, comienza a reproducirse. Si espero unos 30 segundos de no-play, comienza a comenzar de nuevo (sin bucles).
¿Que está pasando aqui? Estoy en KitKat usando
player = new MediaPlayer();
AssetFileDescriptor afd = null;
try {
afd = getAssets().openFd("Theme.mp3");
} catch (IOException e) {
e.printStackTrace();
}
try {
player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
} catch (IOException e) {
e.printStackTrace();
}
try {
player.prepare();
} catch (IOException e) {
e.printStackTrace();
}
player.setLooping(true); //restart playback end reached
//player.setVolume(1, 1); //Set left and right volumes. Range is from 0.0 to 1.0
player.start(); //start play back
Ha pasado mucho tiempo desde que estaba trabajando en esta aplicación. Esto es lo que terminé haciendo para que esto funcione. (Probado en KitKat y Lollipop). Creo que cambiar de MediaPlayer a APMediaPlayer fue parte del truco.
@Override
public void onDestroy() {
if(player != null) {
player.release();
player = null;
}
super.onDestroy();
}
@Override
public void onStart() {
super.onStart();
if(player != null) {
player.start();
}
else {
player = new APMediaPlayer(this); //create new APMediaPlayer
player.setMediaFile("Theme.mp3"); //set the file (files are in data folder)
player.start(); //start play back
player.setLooping(true); //restart playback end reached
player.setVolume(1, 1); //Set left and right volumes. Range is from 0.0 to 1.0
}
}
@Override
public void onResume() {
super.onResume();
if(player != null) {
player.start();
}
}
Si miramos una discusión previa sobre y la confirmación de Android mencionada donde se introdujo, el código anterior podría no inicializar por completo el objeto MediaPlayer
.
El código de ejemplo de KitKat para la reproducción de medios sugiere que debe llamar:
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
inmediatamente después de construir el MediaPlayer
, y antes de llamar a su método setDataSource
.
Tuve el mismo problema y lo solucioné añadiendo lo siguiente justo después de crear una instancia de MediaPlayer.
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
if (mp == mediaPlayer) {
mediaPlayer.start();
}
}
});
Previamente estaba implementando MediaPlayer.OnPreparedListener y reemplazando onPrepared () pero no funcionó.
¡Espero que esto ayude!
establecer en archivo manifiesto puede ayudarle
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />