2017-06-01 9 views
1

Ce code est appelé chaque fois que je clique sur un bouton. Après un certain temps lorsque je clique sur le bouton, le son n'est plus affiché. J'ai essayé d'utiliser un autre fichier de musique, et j'ai aussi essayé d'utiliser le MediaPlayer à la place de SoundPool, mais le problème ne cessait de se produire.Arrêt sonore après un certain temps - Android

Pour être plus précis sur le problème, il est comme: je clique 10 fois et il retourne le son, quand je clique une fois de plus, il arrête

public void displaySound(Context context){ 
     SoundPool sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0); 
     int soundId = sp.load(context, R.raw.bubble_nice, 1); 
     sp.play(soundId, 1, 1, 0, 0, 1); 
     MediaPlayer mPlayer = MediaPlayer.create(context, R.raw.bubble_nice); 
     mPlayer.start(); 
    } 

Lorsque le son cesse, cela apparaît dans le journal: E/MediaPlayer: error (1, -19)

+1

Je pense que vous devriez libérer mPlayer avant d'en utiliser un nouveau. –

+0

comment puis-je faire cela? – Felipe

+0

vous devriez vous référer à la solution de BSavaliya. –

Répondre

2

J'ai essayé votre code et trouvé une solution, vous pouvez essayer comme suit:

d'abord déclarer un objet MediaPlayer gloabally comme

MediaPlayer mPlayer; 

puis utilisez la méthode suivante en cliquant sur le bouton.

public void displaySound(Context context) { 
    if (mPlayer != null && mPlayer.isPlaying()) { 
     mPlayer.stop(); 
     mPlayer.reset(); 
    } 
    mPlayer = MediaPlayer.create(context, R.raw.bubble_nice); 
    mPlayer.start(); 
} 
+0

Il n'a pas fonctionné ici – Felipe

1

quand une pause d'activité, vous devez faire une pause de votre Mediaplayer et onStart() de l'activité Metod ca vous l'appelez à nouveau. ci-dessous le code

@Override 
protected void onStart() { 
    mPlayer.reset(); 
    super.onStart(); 
} 

@Override 
protected void onPause() { 
    mPlayer.pause(); 
    super.onPause(); 
} 

@Override 
protected void onDestroy() { 
    mPlayer.stop(); 
    super.onDestroy(); 
} 
1

Il a mieux fonctionné pour moi avec une petite modification au code de BSavaliya: d'abord déclarer mPlayer comme une variable globale.

if (mPlayer != null) 
{ 
    if(mPlayer .isPlaying()) 
    { 
     mPlayer .stop(); 
    }  
    mPlayer .reset(); 
}