我研究了一下,但找不到解决此问题的任何解决方案: 我想播放MediaPlayer
并在给定时间暂停/停止它。 :从第二次6到第二次17)。以编程方式暂停/停止MediaPlayer Android在给定时间
我知道我可以用seekTo()
方法设置它的起点,但是我可以通过设置一个终点(当然,在达到文件结束限制之前)暂停/停止它的播放吗?
我研究了一下,但找不到解决此问题的任何解决方案: 我想播放MediaPlayer
并在给定时间暂停/停止它。 :从第二次6到第二次17)。以编程方式暂停/停止MediaPlayer Android在给定时间
我知道我可以用seekTo()
方法设置它的起点,但是我可以通过设置一个终点(当然,在达到文件结束限制之前)暂停/停止它的播放吗?
有不同的方法可以做到这一点,这里有一个:
int startFrom = 6000;
int endAt = 11000;
MediaPlayer mp;
Runnable stopPlayerTask = new Runnable(){
@Override
public void run() {
mp.pause();
}};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mp = MediaPlayer.create(this, R.raw.my_sound_file);
mp.seekTo(startFrom);
mp.start();
Handler handler = new Handler();
handler.postDelayed(stopPlayerTask, endAt);
}
的媒体播放器将开始玩6秒后暂停11秒(以秒17)。
您可以使用CountDownTimer
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
mp.stop;
mp.relese();
}
}.start();
我想你可以直接从它的任务创建Timer并调用seekTo()。然后在该Timer Task内部调用stop()/ pause()。
也许this后会对你有帮助。
或者您可以使用处理程序执行此任务,如Ken Wolf显示您。
祝福。
谢谢,这也是一个很好的回答,但我更喜欢处理程序,因为我会处理更简单的情况,如:用户自己暂停/停止玩家..或者在活动停止时不得不暂停玩家。 (在调用sleep()后暂停线程有点烦人:)) – DoruAdryan
我知道这已经有一个答案,但这是任何人想要为控制视频有效地做到这一点的替代方案。
我看到了一个不同的答案,包括不断地检查位置。
请注意,这假设您不需要一个视频的很多不同部分。即使在这种情况下,我建议遵循以下内容。
如果您只需要播放一部分视频并希望它在某处结束,那么为什么不使用免费视频编辑软件并剪辑结尾?你仍然可以使用seekTo()
从任何地方启动它,但这样你不必浪费资源来检查某个位置(带有控件的视频)。
如果您没有视频播放器控件,则接受的答案将起作用。但是如果你有播放器控制,那么它不会因为用户可以暂停和播放视频。
videoView.start()和准备播放的视频之间存在时间差,这取决于视频格式,这些时间差可能超过10帧。
所以最好的办法是在OnPreparedListener里面启动定时器来最小化时间差,或者甚至更多地获得当前的播放持续时间并且在该点设置postDelayed定时器。
谢谢,你的回答看起来正是我要找的。 – DoruAdryan
为什么使用'mp.pause();'而不是'mp.stop();'? –
@SomeoneSomewhere曾经停止过,它不能在不调用'prepare()'的情况下再次启动。如果有机会我想再次播放,我宁愿暂停。调用'stop()'更加最终。 –