這個問題的類似問題很多,我已經看過其他答案。他們說的是,爲了播放聲音(在這種情況下,「tock.wav」,它位於assets文件夾),只要點擊一個按鈕,你應該做到以下幾點:按鈕聲音MediaPlayer崩潰如果按鈕太快按
public void onClick(View button) {
playButtonClickSound();
}
private void playButtonClickSound() {
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
mMediaPlayer.reset();
}
try {
AssetFileDescriptor afd;
afd = getAssets().openFd("tock.wav");
mMediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
mMediaPlayer.prepare();
mMediaPlayer.start();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
這理解正確嗎?這似乎是一個好方法。事情是這樣的,除非用戶非常快速地按下按鈕(s)。然後在某個時候,聲音停止播放。如果您等待幾分鐘再試一次,它會再次播放。當然這不是我想要的。按鈕點擊聲音應該始終有效,而不僅僅是用戶沒有點擊太快。
那麼,有沒有人有一個想法,究竟是什麼造成了這種情況?
禁用按鈕的onClick() – Carbon
你是什麼意思呢? – Zero
@零我會建議兩件事。 1)刪除'if'塊,只需調用'mMediaPlayer.reset()'。任何時候都應該合法,並且阻止球員作爲副作用。 2)獲得點擊處理程序之外的文件描述符。訪問該文件可能是該方法的瓶頸。 - 如果這不起作用,我有另一種可能的解決方案。 – Dave