目前我的设置是这样的。问题是,当我再次播放媒体时,它会在返回开始之前播放一些内容。
bsharks.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (sharks.isPlaying()) {
sharks.seekTo(0);
sharks.pause();
}
else {
sharks.start();
}
}
}
答案 0 :(得分:2)
我可以看到,你正在暂停媒体播放器,而不是重置媒体播放器。所以,如果你想从头开始玩,那么做一点改变如下:
bsharks.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (sharks.isPlaying()) {
sharks.reset();
}
else {
sharks.prepare();
sharks.start();
}
}
答案 1 :(得分:0)
seekTo()是一个异步调用,这意味着一旦调用,它将立即返回,并按照文档:
seekTo(int)调用返回正确的方式,实际的搜索操作可能需要一段时间才能完成,特别是对于正在流式传输的音频/视频。当实际搜索操作完成时,如果事先通过setOnSeekCompleteListener(OnSeekCompleteListener)注册了OnSeekCompleteListener,则内部播放器引擎会调用用户提供的OnSeekComplete.onSeekComplete()。
此外, pause()的行为方式类似:
当 pause()的调用返回时,MediaPlayer对象进入Paused状态。请注意,从“已启动”状态到“暂停”状态的转换(反之亦然)在播放器引擎中异步发生。在调用isPlaying()时更新状态可能需要一些时间,对于流内容,它可能需要几秒钟。
你可以做的是注册onSeekComplete()监听器,然后设置一个标志,比如boolean canPlay = false,并在onSeekComplete()触发时将其更改为true。然后在你的onClick():
bsharks.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (sharks.isPlaying()) {
sharks.seekTo(0);
sharks.pause();
}
else {
if (canPlay) {
canPlay = false;
sharks.start();
}
}
}
请阅读有关MediaPlayer状态机here的更多信息。