0
我建设起着几个视频的应用程序,我有两个不同的用户场景:如何知道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
状态?
是的,我已经检查过该文件,但我不确定没有其他方法..但是谢谢! –