2017-06-01 176 views
1

每次單擊按鈕時都會調用此代碼。一段時間後,當我點擊按鈕,聲音不再顯示。我試圖使用另一個音樂文件,而且我嘗試使用MediaPlayer而不是SoundPool,但問題仍在發生。一段時間後聲音停止 - Android

更具體地講這個問題,它是這樣的:我點擊了10次,它返回的聲音,當我再次點擊停止

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

當聲音停止,這是出現在日誌中:E/MediaPlayer: error (1, -19)

+1

我想你應該在使用新版本之前發佈mPlayer。 –

+0

我該怎麼做? – Felipe

+0

你應該參考BSavaliya的解決方案。 –

回答

2

我曾嘗試你的代碼,並找到解決方案,你可以嘗試如下:

第一gloabally聲明MediaPlayer對象像

MediaPlayer mPlayer; 

然後使用下面的方法點擊按鈕。

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

它沒有在這裏工作 – Felipe

1

當活動暫停時,您必須暫停您的Mediaplayer,並且活動的onStart()方法可以再次調用它。婁代碼

@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

它爲我更好地與一個小的修改,以BSavaliya代碼: 首先聲明的Mplayer作爲一個全局變量。

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