Android 按钮点击声音媒体播放器崩溃,如果按钮按下过快
类似的问题被问了很多次,我也看到了其他的答案。他们说,为了在每次单击按钮时播放声音(在本例中为“tock.wav”,位于资产文件夹中),您应该执行以下操作:Android 按钮点击声音媒体播放器崩溃,如果按钮按下过快,android,button,audio,android-mediaplayer,assets,Android,Button,Audio,Android Mediaplayer,Assets,类似的问题被问了很多次,我也看到了其他的答案。他们说,为了在每次单击按钮时播放声音(在本例中为“tock.wav”,位于资产文件夹中),您应该执行以下操作: public void onClick(View button) { playButtonClickSound(); } private void playButtonClickSound() { if (mMediaPlayer.isPlaying()) { mMediaPlayer.stop();
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
试着用这个
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
mediaPlayer.start(); // no need to call prepare(); create() does that for you
禁用按钮onClick()这是什么意思?@Zero我有两个建议。1) 删除
if
块,只需调用mmediplayer.reset()
。它应该是合法的,在任何时候这样做,并停止作为一个副作用的球员。2) 获取单击处理程序外部的文件描述符。访问该文件可能是该方法的瓶颈。-如果这不起作用,我有另一个可能的解决方案。禁用按钮onClick(),这是什么意思?@Zero我建议两件事。1) 删除if
块,只需调用mmediplayer.reset()
。它应该是合法的,在任何时候这样做,并停止作为一个副作用的球员。2) 获取单击处理程序外部的文件描述符。访问该文件可能是该方法的瓶颈。-如果这不起作用,我有另一个可能的解决方案。您想在每次用户单击时从开始播放声音吗。。。。或者,您希望先完成当前声音,然后播放下一个声音,这与用户单击有关。是否希望每次用户单击…,都从开始播放声音。。。。或者,您希望先完成当前声音,然后播放下一个声音,以防用户单击