人们经常问到与此类似的问题,而我也查看了其他答案。他们说的是,每当单击按钮时,为了播放声音(在本例中为“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

10-07 20:43