Je rencontre un problème étrange dans lequel mon fichier audio est lu parfois, parfois pas. Le hic, c'est que quand il décide de ne pas jouer, le DDMS me donne un:
E/MediaPlayer﹕ Should have subtitle controller already set
Parce que c'est un face à face avec la musique qui ne joue pas, j'ai déterminé que c'est probablement le problème ...
Si la musique ne joue pas et que j'appuie sur le bouton de volume, la lecture commence. Si j'attends environ 30 secondes de non-lecture, il recommence à recommencer (pas de bouclage).
Que se passe t-il ici? Je suis sur KitKat en utilisant
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
En regardant une discussion précédente sur StackOverflow, et la validation Android référencée où ceci a été introduit, le code ci-dessus pourrait ne pas initialiser complètement l'objet MediaPlayer
.
Le code d'exemple KitKat pour la lecture multimédia suggère que vous deviez appeler:
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
immédiatement après avoir construit le MediaPlayer
et avant d'appeler sa méthode setDataSource
.
J'avais le même problème et je l'ai corrigé en ajoutant ce qui suit juste après l'instanciation de MediaPlayer.
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
if (mp == mediaPlayer) {
mediaPlayer.start();
}
}
});
Auparavant, j'implémentais MediaPlayer.OnPreparedListener et remplaçais onPrepared (), mais cela ne fonctionnait pas.
J'espère que ça aide!