2017-06-01 3 views
1

Dieser Code wird jedes Mal aufgerufen, wenn ich auf eine Schaltfläche klicke. Nach einiger Zeit, wenn ich auf den Button klicke, wird der Sound nicht mehr angezeigt. Ich habe versucht, eine andere Musikdatei zu verwenden, und ich habe auch versucht, den MediaPlayer anstelle von SoundPool zu verwenden, aber das Problem ist weiterhin aufgetreten.Sound stopping nach einiger Zeit - Android

präziser über das Problem zu sein, es ist wie: ich 10-mal klicken und den Ton zurückkehrt, wenn ich es stoppt

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(); 
    } 

erneut klicken Wenn der Ton aufhört, diese erscheinen wird im Protokoll: E/MediaPlayer: error (1, -19)

+1

Ich denke, Sie sollten mPlayer vor der Verwendung neu zu veröffentlichen. –

+0

wie kann ich das tun? – Felipe

+0

sollten Sie BSavaliya Lösung beziehen. –

Antwort

2

ich Ihren Code und eine Lösung gefunden, versucht haben, können Sie wie folgt versuchen:

zuerst einen Mediaplayer-Objekt gloabally wie

erklären 210
MediaPlayer mPlayer; 

dann verwenden Sie die folgende Methode auf einen Klick auf die Schaltfläche.

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

Es hat hier nicht funktioniert – Felipe

1

wenn Aktivität pausieren Sie Ihre Mediaplayer pausieren muss, und onStart Aktivität() metod Sie es ca wieder aufrufen. brüllen 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

Er arbeitete für mich besser mit einer kleinen Änderung BSavaliya Code: Erste mPlayer als globale Variable deklariert.

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