如何判斷視訊正在播放?
setOnPreparedListener(MediaPlayer.OnPreparedListener l)::監聽視訊裝載完成的事件。
裝載完成就會播放?不會。
isPlaying()
它說在播放就是在播放?不是。
mediaPlayer.setOnInfoListener(new MediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
//這段代碼的關鍵是MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START這個變量,
// Android SDK中給出的注釋是:這個狀态表示展現了用于渲染的第一幀視訊,也就是這個時候才真正将視訊幀展示到了螢幕上。
if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) {
}
return true;
}
});
第一幀渲染了就在播放?也不是。
判斷是否在播放的唯一條件是:
video.getCurrentPosition()
是的,沒錯,隻有當進度條在變化時,視訊才在播放。
private static final int UPDATE_UI = 1;
private int oldProgress = 0;
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == UPDATE_UI) {
if (null != video && video.isPlaying()) {
int currentProgress = video.getCurrentPosition();
if(oldProgress == currentProgress ){
showView(loading);
}else{
goneView(loading);
}
oldProgress = currentProgress;
}
mHandler.sendEmptyMessageDelayed(UPDATE_UI, 500);
}
}
};
隻有這樣,顯示和隐藏加載動畫才是最準确的。