原为链接如下:
https://blog.csdn.net/Rookie_or_beginner/article/details/115129648https://blog.csdn.net/Rookie_or_beginner/article/details/115129648 简单来说,就是Activity受到锁屏和切换界面的影响销毁了播放时的SurfaceHolder,重新进入程序后没有给播放器指定新的SurfaceHolder,导致没有画面或者画面全黑。
重新写一下解决方案!
使用MediaPlayer+SurfaceView来替换原有的VidwoView
在Activity的onCreate之前声明
private String VideoPath="";//视频的路径,我使用的时raw下的
private SurfaceView videoView;//layout新加SurfaceView
private MediaPlayer videoPlayer;//要在SurfaceView里去创建Media
private boolean IsSurfaceDestoryed=false;//是否被销毁
在Activity的onCreate里面给SurfaceView添加回调
videoView = (SurfaceView) findViewById(R.id.VideoSurfaceView);//id:VideoSurfaceView
videoView.getHolder().addCallback(new SurfaceViewCallback());//添加回调
//设置视频路径,直接播放raw文件夹下视频
VideoPath = "android.resource://" + getPackageName() + "/" + R.raw.back;
在Activity的类中添加SurfaceViewCallback
//surface 回调
class SurfaceViewCallback implements SurfaceHolder.Callback {
@Override
public void surfaceCreated(SurfaceHolder holder) {
{
if(videoPlayer==null) {
videoPlayer = new MediaPlayer();
try {
videoPlayer.setDataSource(MainActivity.this,Uri.parse(VideoPath));
} catch (IOException e) {
e.printStackTrace();
}
videoPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
videoPlayer.setLooping(true);
videoPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
if (!videoPlayer.isPlaying()) {
if (IsSurfaceDestoryed) {
IsSurfaceDestoryed = false;
}
videoPlayer.setDisplay(holder);
videoPlayer.start();
//循环播放
videoPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mPlayer) {
// TODO Auto-generated method stub
mPlayer.start();
mPlayer.setLooping(true);
}
});
}
}
});
videoPlayer.setDisplay(holder);
videoPlayer.prepareAsync();
}
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
///释放
IsSurfaceDestoryed = true;
videoPlayer.release();
videoPlayer=null;
}
}