我正在构建一个播放多个视频的应用,我有两种不同的用户场景:
场景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
状态?
答案 0 :(得分:1)
我查看了Google的文档,您可以找到here。你只能知道玩家是否正在玩();或isLooping(); ......所以不,没有&#34; easy&#34;或&#34;短&#34;实现你想要的方式。希望它有所帮助。