2013-06-21 126 views
5

我研究了一下,但找不到解决此问题的任何解决方案: 我想播放MediaPlayer并在给定时间暂停/停止它。 :从第二次6到第二次17)。以编程方式暂停/停止MediaPlayer Android在给定时间

我知道我可以用seekTo()方法设置它的起点,但是我可以通过设置一个终点(当然,在达到文件结束限制之前)暂停/停止它的播放吗?

回答

14

有不同的方法可以做到这一点,这里有一个:

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)。

+0

谢谢,你的回答看起来正是我要找的。 – DoruAdryan

+0

为什么使用'mp.pause();'而不是'mp.stop();'? –

+0

@SomeoneSomewhere曾经停止过,它不能在不调用'prepare()'的情况下再次启动。如果有机会我想再次播放,我宁愿暂停。调用'stop()'更加最终。 –

1

您可以使用CountDownTimer

new CountDownTimer(30000, 1000) { 

    public void onTick(long millisUntilFinished) { 

    } 

    public void onFinish() { 
     mp.stop; 
     mp.relese(); 
    } 
    }.start(); 
3

我想你可以直接从它的任务创建Timer并调用seekTo()。然后在该Timer Task内部调用stop()/ pause()。

也许this后会对你有帮助。

或者您可以使用处理程序执行此任务,如Ken Wolf显示您。

祝福。

+0

谢谢,这也是一个很好的回答,但我更喜欢处理程序,因为我会处理更简单的情况,如:用户自己暂停/停止玩家..或者在活动停止时不得不暂停玩家。 (在调用sleep()后暂停线程有点烦人:)) – DoruAdryan

0

我知道这已经有一个答案,但这是任何人想要为控制视频有效地做到这一点的替代方案。

我看到了一个不同的答案,包括不断地检查位置。

请注意,这假设您不需要一个视频的很多不同部分。即使在这种情况下,我建议遵循以下内容。

如果您只需要播放一部分视频并希望它在某处结束,那么为什么不使用免费视频编辑软件并剪辑结尾?你仍然可以使用seekTo()从任何地方启动它,但这样你不必浪费资源来检查某个位置(带有控件的视频)。

如果您没有视频播放器控件,则接受的答案将起作用。但是如果你有播放器控制,那么它不会因为用户可以暂停和播放视频。

0

videoView.start()和准备播放的视频之间存在时间差,这取决于视频格式,这些时间差可能超过10帧。

所以最好的办法是在OnPreparedListener里面启动定时器来最小化时间差,或者甚至更多地获得当前的播放持续时间并且在该点设置postDelayed定时器。