如何知道MediaPlayer是否处于Stopped状态?

时间:2014-03-18 23:39:02

标签: android android-mediaplayer

我正在构建一个播放多个视频的应用,我有两种不同的用户场景:

场景1.在播放视频“A”时,如果用户点击下一个按钮,则会停止并播放下一个视频“B”。 场景2.播放视频'A',如果完成,用户点击下一个按钮,播放视频'B'。

对于第一个场景,我使用mediaPlayer.isPlaying()方法来检测它是否处于Started状态并且工作正常。但是,如果我对第二种方案使用相同的代码,isPlaying()会抛出IllegalStateException

以下是我播放视频的代码:

private void playVideos(SurfaceHolder holder) {

    try {
        mediaPlayer = new MediaPlayer();
        mediaPlayer.setDisplay(holder);
        Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + video_files[mCounter]);
        mediaPlayer.setDataSource(this, uri);
        mediaPlayer.prepare();
        mediaPlayer.start();
        mediaPlayer.setOnCompletionListener(new OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) {
                if (mCounter <= 8) {
                    onVideoCompletion(mediaPlayer);
                } else {
                    mediaPlayer.stop();
                    mediaPlayer.release();
                }
            }
        });

    } catch (IOException e) {
    } catch (IllegalArgumentException e) {
    } catch (IllegalStateException e) {
    }
} 

此外,这是我的按钮监听器播放下一个视频:

nextBtn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            if(mediaPlayer != null) {
                if(mediaPlayer.isPlaying()) {
                    mediaPlayer.stop();
                    mediaPlayer.release();
                }
            }
            mCounter += 1;
            if (mCounter <= 8) {
                playVideos(holder);
            }
        }
    });

我尝试解决此问题的一种方法是使用布尔变量而不是isPlaying()方法。例如,

boolean mIsPlaying = false;
...
// in button listener
if(mIsPlaying) {
   mediaPlayer.stop();
   mediaPlayer.release();
}
...
// in playVideos() function
mediaPlayer.start();
mIsPlaying = true;
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {

    @Override
    public void onCompletion(MediaPlayer mp) {
        if (mCounter <= 8) {
            onVideoCompletion(mediaPlayer);
        } else {
            mediaPlayer.stop();
            mediaPlayer.release();
        }
    }
});

这适用于我的两个场景,但我不确定这是否是正确的方法。有没有办法检测mediaPlayer是否处于Stopped状态?

1 个答案:

答案 0 :(得分:1)

我查看了Google的文档,您可以找到here。你只能知道玩家是否正在玩();或isLooping(); ......所以不,没有&#34; easy&#34;或&#34;短&#34;实现你想要的方式。希望它有所帮助。