You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android MediaPlayer点击播放问题:播放中重复点击无法重播如何解决?

解决MediaPlayer重复点击重新播放的问题

你的问题出在MediaPlayer的状态管理上:当音频正在播放时,直接调用start()不会生效,因为MediaPlayer的状态机不允许在播放状态下重复触发start()方法。要实现"点击即从头重新播放"的效果,我们需要在点击时先检查当前播放状态,然后调整到合适的状态再启动播放。

修改后的代码如下:

final MediaPlayer mistake = MediaPlayer.create(getActivity(), R.raw.mistake);
tv_mistake.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // 检查MediaPlayer是否正在播放
        if (mistake.isPlaying()) {
            // 如果正在播放,直接将进度跳转到音频开头,会自动继续播放
            mistake.seekTo(0);
        } else {
            // 如果未播放(包括播放完成、从未播放过的状态),直接启动播放
            mistake.start();
        }
    }
});

代码解释:

  • mistake.isPlaying():判断当前MediaPlayer是否处于播放状态
  • mistake.seekTo(0):将播放进度直接设置到音频的起始位置(0毫秒处),此时如果原本在播放,会立刻从头开始继续播放,无需再次调用start()
  • 当音频已经播放完成时,MediaPlayer处于「播放完成」状态,此时调用start()会自动从头开始播放,所以else分支可以覆盖这种情况

额外注意事项:

为了避免内存泄漏和资源浪费,记得在宿主组件(比如Activity/Fragment)的生命周期销毁方法中释放MediaPlayer资源:

@Override
public void onDestroy() {
    super.onDestroy();
    if (mistake != null) {
        mistake.release();
    }
}

这样处理后,不管音频是正在播放还是已经播放完成,只要点击按钮都会立刻从头开始播放啦。

内容的提问来源于stack exchange,提问作者Y. Glik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:39:29