这是我的情景:
我有一个从20秒倒计时的计时器。 13秒后,声音开始播放。在0秒时,我停止当前声音,加载新声音并播放新声音。一旦声音结束,我加载前一个声音,将其设置为循环,然后启动它。
这是命中0秒的逻辑:
mp.stop();
mp = MediaPlayer.create(mActivity, R.raw.second_sound);
mp.start();
mp.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp = MediaPlayer.create(mActivity, R.raw.first_sound);
mp.setLooping(true);
mp.start();
}
});
一旦最后一个声音开始播放,调用mp.release()并不会停止播放器。关于如何阻止玩家的任何想法?
注意:mp.release()在我第一次开始播放时和第二次声音期间有效,但在循环播放期间不起作用。
解决方案:我的全球MediaPlayer也被命名为" mp"。糟糕。
答案 0 :(得分:1)
您将mp
MediaPlayer
个对象混淆了一点。如果在mp.release()
方法之外调用onCompletion()
,则不是指在那里创建的循环实例。更改onCompletion()
中的标识符以引用"外部" mp
。例如,如果您的代码位于MainActivity
:
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer mp)
{
MainActivity.this.mp = MediaPlayer.create(MainActivity.this, R.raw.chirp);
MainActivity.this.mp.setLooping(true);
MainActivity.this.mp.start();
}
}
);
答案 1 :(得分:0)
为什么每次创建新的媒体播放器而不是在onCompltion上发布旧的媒体播放器?你试过setDataSource吗?