我试图在应用程序中实现基本的MediaPlayer,并根据剪辑是否正在播放,播放完成或手动中断播放(通过按相同按钮)使按钮更改状态。 / p>
使用下面的代码,我得到以下结果:
首次加载时,音频播放正常。
如果在播放期间再次按下ImageButton,播放将停止。当我再次按下它时,播放将从停止的时间戳恢复(我认为这是一种奇怪的行为,更典型的是" pause()"。
播放完成后,按钮更改工作正常,但我无法再次重播音频文件。当我按下开始时,它开始播放,然后立即转换到播放完成,而不实际播放音频。
我一直在搜索其他帖子/ google / android文档,但尚未找到解决方案。
到目前为止我也尝试过:
setLooping(真); - 除了从未到达的setOnCompletionListener之外,这根本没有任何效果。音频根本没有重播。
在onCompletion方法中,将seekTo()设置为几个不同的值(0,100),并使用包含" getCurrentPosition()"的日志消息。确认它实际上正在这样做,但即使这确认它从位置0或100开始,结果仍然相同(没有听到音频并立即完成)。
在onCompletion方法中,有几种调用" stop()"," prepareAsync()"甚至准备()。结果是相同的,但是在后续尝试(即尝试2,3等)回放时,当调用onCompletion方法时,我开始在调用不正确状态的stop()/ prepare()方法时遇到各种错误。 / p>
final ImageButton pauseButton = (ImageButton) rootView.findViewById(R.id.playButton1);
final MediaPlayer mediaPlayer = MediaPlayer.create(getActivity().getApplicationContext(), R.raw.ch01_01);
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
pauseButton.setImageResource(R.drawable.play_button);
}
});
pauseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mediaPlayer.isPlaying()) {
mediaPlayer.stop();
mediaPlayer.prepareAsync();
pauseButton.setImageResource(R.drawable.play_button);
} else {
mediaPlayer.start();
pauseButton.setImageResource(R.drawable.stop_button);
}
}
});
任何帮助将不胜感激!
P.S。我在onCreateView方法中使用了所有这些代码,用于我的应用程序中的Fragment。万一有人认为这可能是相关的。
答案 0 :(得分:0)
显然这个问题只是我的三星Galaxy S2,因为相同的代码在运行Lollipop 5.0.1的Nexus 7(2013)上完美无缺。
Galaxy S2上的问题包括以下内容:
一旦MediaPlayer处于PlaybackCompleted状态,按下播放时它将不再播放相同的文件
尝试运行PlaybackCompleted状态的方法(根据Android文档应该是有效的)似乎做某事(即seekTo(0);实际上会寻求0,但音频文件永远不会播放时间。