Media player lecture de plusieurs fichiers en même temps
Je vais avoir un problème où une fois que l'utilisateur clique sur un son pour jouer de ma ListView, alors alors que que le son est de jeu il clique sur un autre son, les 2 sons qu'ils ont cliqué sur jouer en même temps.
Je voudrais avoir le son qui était en train de jouer, de la finition, puis démarrez le nouveau son qu'ils ont cliqué.
Si quelqu'un pouvait m'aider, ce serait très apprécié!
CODE:
ListView BoardList = (ListView) findViewById(R.id.BoardList);
String List[] = {
"Audio1", "Audio2", "Audio3", "Audio4", "Audio5"
, "Audio6", "Audio7", "Audio8", "Audio9"
, "Audio10", "Audio11", "Audio12" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.listcustomize, R.id.textItem, List);
BoardList.setAdapter(adapter);
BoardList.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
MediaPlayer mPlayer = null;
if (position == 0) {
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio1);
mPlayer.start();
}
if (position == 1) {
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio2);
mPlayer.start();
}
if (position == 2) {
mPlayer = MediaPlayer.create(HodgeMain.this, R.raw.Audio3);
mPlayer.start();
}
if (position == 3) {
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio4);
mPlayer.start();
}
if (position == 4) {
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio5);
mPlayer.start();
}
if (position == 5) {
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio6);
mPlayer.start();
}
if (position == 6) {
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio7);
mPlayer.start();
}
if (position == 7) {
mPlayer = MediaPlayer
.create(HodgeMain.this, R.raw.Audio8);
mPlayer.start();
}
if (position == 8) {
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio9);
mPlayer.start();
}
if (position == 9) {
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio10);
mPlayer.start();
}
if (position == 10) {
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio11);
mPlayer.start();
}
if (position == 11) {
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio12);
mPlayer.start();
}
Conseils non sollicités => C'est habituellement un signe que le code peut être écrit de manière plus efficace lorsque vous êtes à répéter la même chose encore et encore.
OriginalL'auteur Jack | 2013-08-21
Vous devez vous connecter pour publier un commentaire.
Essayer
Déclarer
MediaPlayer mPlayer;
commun pour tous lesComme
ensuite utiliser
mPlayer.release();
Sur
release():
Releases resources
associés à cetteMediaPlayer object
.Il est considéré comme une bonne pratique pour appeler cette méthode lorsque vous avez fini d'utiliser l'
MediaPlayer
.En particulier, chaque fois qu'un
Activity of an application is paused (its onPause() method is called), or stopped (its onStop() method is called)
, cette méthode doit êtreinvoked to release the MediaPlayer object
, sauf si la demande a un besoin particulier de garder l'objet autour de la.PS. j'ai essayé avec
release()
qui est fonctionne bien !Exemple: qui travaille pour moi
essayez la mise à Jour de la réponse !
J'ai mis à jour mon code dans ma réponse, de sorte que vous pouvez voir si j'ai tout fait correctement. Pour une raison quelconque, les fichiers audio sont encore à jouer les uns sur les autres.
vérifier mes mises à jour de réponse avec l'exemple qui fonctionne très bien pour moi !
J'ai google avais l'erreur et que disent les gens de l'ignorer. De toute façon, je vous remercie pour votre aide et le temps. Bonne journée 🙂
OriginalL'auteur Tarsem Singh
Avant de commencer à envisager de prendre les mesures suivantes:
Mettre en œuvre à l'intérieur de votre
if
états et voyez si cela fonctionne pour vous!Mais pour que cela fonctionne, vous devez définir votre
MediaPlayer
objet dans un Champ d'application plus large et de ne pas déclarer à chaque fois une nouvelleMediaPlayer
objet.Post yor trace de la pile puis de voir pourquoi il s'est planté!
OriginalL'auteur Pavlos
comme déjà mentionné, vous avez besoin d'instancier la
MediaPlayer
classe à l'aide denew
pour accéder à son objet n'importe où dans votre classe, et non pas de façon statique, comme vous le faites maintenant. Je suis sûr que la consultation de ce document vous aidera à comprendre plus au sujet de laMediaPlayer
: http://developer.android.com/reference/android/media/MediaPlayer.htmlOriginalL'auteur Droidman
Le problème, c'est la méthode statique MediaPlayer.create(); est fait renvoyer une nouvelle instance de MediaPlayer pour vous.
La raison de multiples jouez est parce que vous n'êtes pas d'arrêter précédemment lecture d'un fichier audio (comme d'autres l'ont suggéré).
Appeler cette méthode IMMÉDIATEMENT AVANT l'appel de MediaPlayer.create():
Après que vous avez arrêté le précédent lecteur multimédia, vous devriez être en mesure de créer le nouveau sans le son se chevauchent.
Si vous obtenez une erreur, alors quelque chose de complètement différent qui est très mauvais avec votre code. Vous êtes en cours d'exécution dans une méthode statique, n'est-ce pas?
OriginalL'auteur Cruceo