如何通过一个按钮有效地使用最新媒体

时间:2014-01-28 06:45:04

标签: android android-mediaplayer

目前我的设置是这样的。问题是,当我再次播放媒体时,它会在返回开始之前播放一些内容。

bsharks.setOnClickListener(new View.OnClickListener() {     
    @Override
    public void onClick(View v) {
        if (sharks.isPlaying()) {
            sharks.seekTo(0); 
            sharks.pause(); 
        }
        else { 
            sharks.start();
        }
    }
}

2 个答案:

答案 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的更多信息。