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
相关产品推荐
相关产品推荐

