从背景返回视频时的空白屏幕

时间:2016-01-17 14:37:13

标签: android android-mediaplayer surfaceview android-lifecycle

我正在使用谷歌IMA示例在我的应用程序中运行视频,经过一些更改以确保它能够满足我的需求,我仍然有一个问题,我无法重新获得,我希望视频在app应用时播放根据活动停止前的状态从背景返回或暂停。

当用户在暂停模式下停止活动时,我有状态,我有位置但仍有一个问题。当我从背景返回视频时,屏幕是黑色的,直到我在控制器中按下开始,并且不需要寻找它。

我需要从背景返回时暂停显示预览图像。

@Override
public void onResume() {
    if (mVideoPlayerController != null) {
        mVideoPlayerController.resume();

        if (mVideoPlayerController.isContentStarted())
            if (isPlayedBeforePaused) {
                mVideoPlayer.play();
            } else {

            }
    }
    super.onResume();
}

在我的视频播放器中:

 @Override
    public void play() {
        start();
    }

    @Override
    public void start() {
        super.start();
        // Fire callbacks before switching playback state.
        switch (mPlaybackState) {
            case STOPPED:
                for (PlayerCallback callback : mVideoPlayerCallbacks) {
                    callback.onPlay();
                }
                break;
            case PAUSED:
                for (PlayerCallback callback : mVideoPlayerCallbacks) {
                    callback.onResume();
                }
                break;
            default:
                // Already playing; do nothing.
        }
        mPlaybackState = PlaybackState.PLAYING;
    }

这是我可怜的解决方案,但我不想写那种代码

@Override
public void onResume() {
    if (mVideoPlayerController != null) {
        mVideoPlayerController.resume();


        if (mVideoPlayerController.isContentStarted())
            if (isPlayedBeforePaused) {
                mVideoPlayer.play();
            } else {
                mVideoPlayer.play();
                final Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mVideoPlayer.pause();
                    }
                }, 1000);
            }

    }
    super.onResume();
}

2 个答案:

答案 0 :(得分:0)

处理onPause暂停播放,同时保存playbackPosition。 在onResume中查看当前的playbackPosition。如果它们不匹配,请重新启动MediaPlayer搜索到playbackPosition并使用play()继续播放,否则只需执行play()

视图可能还需要重新初始化。这可能是黑屏的原因。

答案 1 :(得分:0)

我唯一的解决方案是播放和暂停视频,但只有在准备好之后。

等我的主要活动

@Override
public void onResume() {
    if (mVideoPlayerController != null) {
        mVideoPlayerController.resume();


        if (mVideoPlayerController.isContentStarted())
            if (isPlayedBeforePaused) {
                mVideoPlayer.play();
            } else {
                // set pause request will notify on prepare to play and pause
                // this fix the bug that on pause when return from background it shows black screen
                mVideoPlayerController.mVideoTracker.setPauseRequest();
            }

    }
    super.onResume();
}

和我的视频跟踪器(视频视图)

super.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        mMediaPlayer = mp;
        if (mPauseRequest) {
            play();
            pause();
            mPauseRequest = false;
        }
    }
});

我知道这不是最好的方式,但我发现它是最好的,没有错误,这样的东西存在( - :

希望它会帮助某人