YouTubePlayerFragment黑屏在方向上发生变化

时间:2017-08-05 22:42:15

标签: android video youtube-api android-youtube-api

我正在尝试继续播放YouTubePlayerFragment方向更改。

代码如下所示:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
    FrameLayout frameLayout = new FrameLayout(getActivity());
    populateViewForOrientation(inflater, frameLayout);
    return frameLayout;
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    LayoutInflater inflater = LayoutInflater.from(getActivity());
    populateViewForOrientation(inflater, (ViewGroup) getView());
}

private void populateViewForOrientation(LayoutInflater inflater, ViewGroup viewGroup) {
    viewGroup.removeAllViewsInLayout();
    rootView = inflater.inflate(getLayoutResId(), viewGroup);
    ButterKnife.bind(this, rootView);

    if (frYTube != null) {
       FragmentTransaction transaction = getFragmentManager().beginTransaction();
       transaction.replace(R.id.frame, frYTube);
       transaction.commitAllowingStateLoss();
    }
}

片段被替换(我看到它上面的文字)和音乐正在播放但不是视频 - 黑屏。 我怎么处理它?有可能恢复视频吗?顺便说一句,如果旋转后下一个视频是oppenes - 视频出现。 我试图拨打pauseplay来获取当前视频 - 它没有任何帮助。 我没有尝试YouTubePlayerView,因为我使用moxy所以我需要处理片段。

UPD

看起来创建自定义视图,其中YouTubePlayerFragment内部具有更稳定的行为(然后删除添加视图)。但黑屏问题仍然存在。

在这种情况下可以通过以下方式恢复视频:

 mYouTubePlayer.loadVideo(url);
 ...
 public void onLoaded(String s) {
  mYouTubePlayer.seekToMillis(mills);

但是没有意义重载视频,我试图避免这种情况 - 延迟出现

3 个答案:

答案 0 :(得分:1)

根据此post,确保在还原过程中调用YouTubePlayerView而不是显式创建时初始化onCreate()中的onCreate()。这里是tutorial,其中包含片段的活动不需要扩展任何特殊的基类。

您还可以查看此相关主题:Screen orientation not working with youtubePlayerfragment

答案 1 :(得分:1)

快速简便的解决方案是在您的视频活动中添加以下内容:

android:configChanges="orientation|keyboard|keyboardHidden|screenSize"

我有一个应用程序将其用于视频,它运行得很好。一切都在方向改变时正确布局,活动和片段实例不会被拆除,从而无缝继续播放。

如果您希望拆除/重新创建活动,同时保留片段实例,请重新阅读 setRetainInstance()的文档。

要使其正常工作,您需要注意一些微妙的细微差别: https://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)

使用它会在方向更改后继续播放片段

答案 2 :(得分:0)

我发现的唯一方法是手动处理屏幕方向:

1)添加到您的活动中:

android:configChanges="keyboard|keyboardHidden|orientation|screenSize"

2)在活动类中:

@Override
public void onConfigurationChanged(Configuration newConfig) {
   super.onConfigurationChanged(newConfig);
   someFunctionToHandleOrienttion();
}

你不应该夸大新的布局。只需删除并重新创建/添加除youtubeframe之外的所有内容,以使您想要的土地布局。它有点棘手和奇怪,但在其他情况下,你有黑屏而不是视频。