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
狀態?
是的,我已經檢查過該文件,但我不確定沒有其他方法..但是謝謝! –