2013-10-12 202 views
1

每次按下按鈕時,我的應用程序都會播放硬幣聲音。Android聲音重置

coin_sound.start(); 

你可以很容易地按比硬幣更快的聲音。當發生這種情況時,我希望硬幣聲音從開始時就按下按鈕開始。

if(coin_sound.isPlaying()){ 
    coin_sound.reset(); 
    coin_sound = MediaPlayer.create(getContext(), R.raw.coin02); 
} 
coin_sound.start(); 

問題是,加載媒體文件很小,因爲它可能是一個相對較慢的過程。當你開始真正快速點擊按鈕時,應用程序落後了。

有沒有解決我的問題的方法?我唯一的想法是做一些與coin_sounds數組,但這種方法看起來這將是混亂和毛...

回答

1

這裏發佈的其他答案有點正確。您不應該一次又一次地致電create

不過,該答案中的代碼有問題。 reset方法將MediaPlayer發送到空閒狀態,在那裏調用大多數其他方法是非法的。如果你走這條路,你必須調用按以下順序方法:

coin_sound.reset(); 
coin_sound.setDataSource(...); 
coin_sound.prepare(); 
coin_sound.start(); 

的區別調用create和方法的前面的調用序列之間僅僅是一個新的實例的創建。但是,這並不是實現該做的最快捷的方法。

當您想要重新播放當前播放聲音時,您應該簡單地撥打coin_sound.seekTo(0);。所以這樣做:

if (coin_sound.isPlaying()) coin_sound.seekTo(0); 
else coin_sound.start(); 

那假設你已經留在就緒狀態MediaPlayer所以start可以被調用。您可以通過在onCompletion偵聽器中調用resetsetDataSourceprepare來完成此操作。此外,確保在不再需要聲音時撥打release

0

這是因爲你在啓動按鈕單擊事件coin_sound,試試這個

在onCreate方法初始化這個變量

coin_sound = MediaPlayer.create(getContext(), R.raw.coin02); 

然後使此代碼爲您的按鈕

if(coin_sound.isPlaying()){ 
coin_sound.reset(); 
} 
coin_sound.start(); 

問題是您recreatin g每次點擊一個新媒體播放器時,新媒體播放器不會認爲有聲音

並且您是否需要再次使用coin_sound.start();開始播放?不重啓停止然後開始爲你的聲音?

+0

據我所知,RESET不會重新啓動它刪除它的聲音。 – java