【问题标题】:Cannot load modern controls UI. Upgrade to the latest version of the Android YouTube API无法加载现代控件 UI。升级到最新版本的 Android YouTube API
【发布时间】:2016-01-26 14:20:33
【问题描述】:

我正在尝试使用Android Youtube API。一切正常,除了当我扩展AppCompatActivity 时。 YoutubePlayer 的 UI 看起来很糟糕。我尝试了YoutubePlayerFragmentYoutubePlayerSupportFragment。没有任何效果。
logcat如下:

W/YouTubeAndroidPlayerAPI: Cannot load modern controls UI. Upgrade to the latest version of the Android YouTube API.

我已经更新了最新的 youtube api 1.2.2。但它仍然无法正常工作。
奇怪的是,如果我扩展 FragmentActivityActivity,它会起作用。
请帮忙。提前致谢。

【问题讨论】:

标签: android youtube-api android-youtube-api youtube-data-api


【解决方案1】:

对我来说,问题是我只能播放一次视频,但之后 YouTubePlayer 不会播放任何视频,我希望还有很多其他人也面临与 YouTubeAndroidPlayerAPI 类似的问题。我认为最新的 youtube 应用(版本 10.37.58)和 YouTubeAndroidPlayerAPI 1.2.1 不兼容。

据我所知,您目前唯一可以解决此问题的方法是将设备上安装的 youtube 应用降级到 10.36.52 或更低版本。 (可以从apk镜像获取)

我在使用 YouTubeAndroidPlayerAPI 时注意到的是,在 youtube 版本 10.36.52 中,它会抛出警告消息“无法加载现代控件 UI。升级到最新版本的 Android YouTube API。”每次我尝试播放视频时都在 logcat 上,但其他工作正常。对于 10.35.53 及以下版本,不会引发此类警告消息。

原因:我不确定,但我认为这与 YouTubeAndroidPlayerAPI 1.2.1 中的 YoutubePlayerSupport 片段的巨大内存泄漏问题有关,该片段广为人知并在 google 数据 api 问题跟踪器中报告。它终于在上个月的 9 月 1 日得到修复(至少目前的状态是这样的),在它被报道一年后(惊讶地看到谷歌花了这么长时间)。然而,谷歌尚未推出带有修复程序的新版 YouTubeAndroidPlayerAPI。所以也许他们在 9 月份修复了 youtube 应用程序中的内存问题,这在某种程度上破坏了 YouTubeAndroidPlayerAPI 1.2.1 的功能(因为 YouTubeAndroidPlayerAPI 直接依赖于 youtube 应用程序才能工作)。

【讨论】:

  • 我遇到了同样的问题。你有解决办法吗?
【解决方案2】:

当我应用到我的应用程序时,可以快速解决这个问题。

  1. 首先,您需要停止使用 YouTubePlayerFragment 或 YouTubePlayerSupportFragment
  2. 相反,创建一个包含 YouTube 视频视图的活动。这是我的 xml 和活动: activity_you_tube_player.xml

<?xml version="1.0" encoding="utf-8" ?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="0dp"
android:paddingRight="0dp" android:paddingTop="0dp" android:paddingBottom="0dp" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:showIn="@layout/activity_you_tube_player" tools:context="com.stavira.ipaphonetics.YouTubePlayerActivity">

  <com.google.android.youtube.player.YouTubePlayerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/youtubePlayerView">
  </com.google.android.youtube.player.YouTubePlayerView>
</RelativeLayout>

活动:

public class YouTubePlayerActivity extends YouTubeBaseActivity {

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_you_tube_player);

    YouTubePlayerView playerView = (YouTubePlayerView) findViewById(R.id.youtubePlayerView);

    final String videoID = getIntent().getExtras().getString("videoID");
    playerView.initialize(YTConfig.DEVELOPER_KEY, new YouTubePlayer.OnInitializedListener() {
        @Override
        public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {

            youTubePlayer.setFullscreen(true);
            youTubePlayer.setShowFullscreenButton(true);
            youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.MINIMAL);
            youTubePlayer.loadVideo(videoID.replace("https://www.youtube.com/watch?v=", ""));

            youTubePlayer.setPlayerStateChangeListener(new YouTubePlayer.PlayerStateChangeListener() {
                @Override
                public void onLoading() {

                }

                @Override
                public void onLoaded(String s) {

                }

                @Override
                public void onAdStarted() {

                }

                @Override
                public void onVideoStarted() {

                }

                @Override
                public void onVideoEnded() {

                }

                @Override
                public void onError(YouTubePlayer.ErrorReason errorReason) {

                }
            });
        }

        @Override
        public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {

        }
    });


}

}

  1. 在您之前托管 YouTube 片段的片段中,使用 Intent 启动 YouTube 活动。

【讨论】:

  • 正如我在问题中所说,这个问题在我使用 YoutubeBaseActivity 时不会发生,而是 AppcompatActivity
  • 是的,这就是为什么我建议您将播放器放在 YoutubeBaseActivity 中并从您的片段中调用该活动。
  • @codingpuss 对我来说它甚至无法在 Redmi1s 等设备上使用 YouTubeBaseActivity
猜你喜欢
  • 2016-08-29
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多