2010-08-22 6 views
3

J'utilise la classe MediaPlayer d'Android pour lire des ressources distantes. Je voudrais que l'utilisateur puisse réutiliser le MediaPlayer pour ouvrir du contenu et le changer pour en jouer un autre sans avoir à recréer le MediaPlayer. J'ai donc écrit une méthode pour ouvrir une ressource qui, tout d'abord, réinitialise le MediaPlayer afin que je puisse l'envoyer à l'état inactif. Après cela, je définis le nouvel URI et j'appelle la méthode de préparation. Il arrive assez souvent, de toute façon, que la méthode setDataSource se bloque, pendant de nombreuses secondes et même pendant quelques minutes. Voici le code:Réutilisation de MediaPlayer d'Android

mediaPlayer.reset(); 
mediaPlayer.setDataSource(this, Uri.parse(uri)); 
mediaPlayer.setDisplay(surfaceHolder); 
mediaPlayer.prepare(); 
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

Toute idée pourquoi la méthode doit bloquer pendant plusieurs secondes après setDataSource et avant la méthode setDisplay? Merci!

Répondre

1

Cela pourrait être: "Doit appeler la méthode [setAudioStream] avant prepare() ou prepareAsync() pour que le type de flux cible devienne efficace par la suite."

http://developer.android.com/reference/android/media/MediaPlayer.html#setAudioStreamType(int)

+0

semble que le problème était lié au dispositif spécifique que j'utilisais. J'ai testé le même code sous Android 2.2 (je connaissais ce problème sous Android 2.1) sur un autre appareil et ça fonctionne comme un charme. –