这个问题的类似问题很多,我已经看过其他答案。他们说的是,为了播放声音(在这种情况下,“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