项目本身使用的是ijkplayer的封装库,在魅族手机上使用exoplayer播放视频时调用exoplayer.stop()方法后,再次调用 exoplayer.isPlaying竟然还是返回true。这个就很bug了,去看了看源代码,ExoMediaPlayer里面isPlayer使用的代码如下:
@Override
public boolean isPlaying() {
if (mMediaPlayer.getPlayWhenReady()) {
return true;
}else {
return false;
}
}
然而stop方法下代码
@Override
public void stop() {
mMediaPlayer.stop();
}
调用了stop后并没有重置isPlaying中的状态,即调用setPlayWhenReady方法。思考了一下怎么来确定视频播放停止了呢,然后确认使用以下方案解决问题:
mVideoView.pause();
mVideoView.stop();
mVideoView.seekTo(0);
即在stop前调用下pause方法,因为pause方法中实现的就是mMediaPlayer.setPlayWhenReady(false);这样再调用isPlaying()方法就是false了。之后以又调用了一下seekTo(0)是通过isPlaying我只知道是暂停了,但我怎么知道停止呢?所以,seekTo(0)后,我在判断视频是否停止时调用方法getCurrentPosition()来判断是否等于0,这样一来就可以通过isPlaying且getCurrentPosition==0来判断视频是否停止。
exoplayer不像ijkplayer使用起来那么方便,ijkplayer调用stop方法后isPlaying就是false,当然后防止exoplayer在destroy页面时还会继续播放问题时,在onDestroy方法中调用这三句即可:
mMediaPlayer.setPlayWhenReady(false);
mMediaPlayer.stop();
mMediaPlayer.seekTo(0);