人们经常问到与此类似的问题,而我也查看了其他答案。他们说的是,每当单击按钮时,为了播放声音(在本例中为“tock.wav”,位于 Assets 文件夹中),您应该执行以下操作:
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();
}
}
这有道理吧?看来是个好方法。事实是,除了用户彼此非常快速地按下按钮之外,这都是可行的。然后在某个时候,声音停止播放。如果您等待几分钟,然后重试,它将再次播放。当然这不是我想要的。按钮单击声音应该始终起作用,不仅是用户单击速度不是太快。
那么,有谁知道这是什么原因吗?
最佳答案
尝试使用这个
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
mediaPlayer.start(); // no need to call prepare(); create() does that for you