1

我正在使用google IMA示例在我的应用程序中运行视频,经过一些更改以确保它满足了我的需要,但我仍然遇到了无法重新注册的问题,我想要当应用程序从后台返回时要播放的视频或根据活动停止前的状态暂停播放的视频。当从后台返回视频时出现空白屏幕

我有状态,当用户在暂停模式下停止活动时,我有位置,仍然存在一个问题。当我从后台返回视频时,屏幕会变黑,直到我按下控制器中的开始位置,并且无需设置其位置。

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

@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(); 
} 
+0

与使用exoplayer有同样的问题:) – Amir

+0

应用程序恢复后,您是否调用了'MediaPlayer#setDisplay()'? – fadden

+0

我无法在简历上设置显示,它会抛出非法状态异常。并且媒体播放器已经在 –

回答

0

手柄暂停回放,另存为playbackPosition。 在onResume检查以前的playbackPosition与目前。如果它们不匹配,请将MediaPlayer seek找到playbackPosition,然后用play()继续播放,否则请执行play()

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

+0

之前设置了显示,但是这并不是问题,即使我从后台返回搜索标记处于正确的位置,并且您可以将它移动到滚动的任何位置,但您仍然可以看到黑屏直到播放被按下 –

+0

'play()'做什么?不是'MediaPlayer.play()',而是你的'play()'。它是否重新发表意见? – sschrass

+0

我已将代码添加到我的问题中 –

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; 
     } 
    } 
}); 

我知道这是不是最好的一段路要走,但它最好的我发现,是错误自由和这样的事情是存在的( - :

希望它会帮助某人

相关问题