ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android:无法在片段中获取YouTube Player API

2019-07-25 01:32:23  阅读:224  来源: 互联网

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


我试图让我的应用程序以片段形式播放YouTube视频,因为This Official Documentation表示您可以分片播放YouTube视频.

但我无法完成它.

这是我的代码:

SingleArticleFragment:

public class SingleArticleFragment extends YouTubePlayerSupportFragment implements
        YouTubePlayer.OnInitializedListener {
    public static final String API_KEY = "my api key";
    public static final String YOUTUBE_VIDEO_CODE = "_oEA18Y8gM0";
    // YouTube player view
    private YouTubePlayerView youTubeView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.article, container, false);
        return v;
    }

    @Override
    public void onViewCreated (View view, Bundle savedInstanceState) {
    youTubeView = (YouTubePlayerView) getActivity().findViewById(R.id.youtube_view);

    // Initializing video player with developer key
    youTubeView.initialize(API_KEY, this);
    }

    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
        if (!b) {

            // loadVideo() will auto play video
            // Use cueVideo() method, if you don't want to play it automatically
            youTubePlayer.cueVideo(YOUTUBE_VIDEO_CODE);

            // Hiding player controls
            youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.CHROMELESS);
        }
    }

    @Override
    public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
        if (youTubeInitializationResult.isUserRecoverableError()) {
            youTubeInitializationResult.getErrorDialog(getActivity(), 1).show();
        } else {
            String errorMessage = "There was an error initializing the YouTubePlayer";
            Toast.makeText(getActivity(), errorMessage, Toast.LENGTH_LONG).show();
        }
    }
}

这是article.xml:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:background="@color/white">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent" android:layout_height="wrap_content"
        android:orientation="vertical">
<!-- Cover Video -->
        <com.google.android.youtube.player.YouTubePlayerView
            android:id="@+id/youtube_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="30dp" />

        <!-- Article Cover Photo -->
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/single_article_cover_photo"
            android:layout_gravity="center"
            android:adjustViewBounds="true"
            android:layout_weight=".14"/>

        <!-- Article Title -->
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/single_article_title"
            android:layout_gravity="center"
            android:textColor="@color/black"
            android:textSize="20sp"
            android:textStyle="bold"
            android:padding="10dp"
            android:layout_weight=".14"/>
    </LinearLayout>
</ScrollView>

LogCat错误:

android.view.InflateException: Binary XML file line #11: Error inflating class com.google.android.youtube.player.YouTubePlayerView

.
.
.

Caused by: java.lang.IllegalStateException: A YouTubePlayerView can only be created with an Activity  which extends YouTubeBaseActivity as its context. 

那么LogCat告诉我的是:YouTube只能在Activities!中运行,但是android文档却说不然.

请问有人可以帮忙吗?

提前致谢.

解决方法:

你正在混合两种不同的方法.

您可以将YouTubePlayerViewYouTubeBaseActivity一起使用,也可以使用YouTubePlayerFragment/YouTubePlayerSupportFragment.在YouTubePlayerFragment中使用YouTubePlayerView是完全错误的.

如果您使用第一种方法(查看活动),则需要将视图放在XML中,然后将YouTubePlayer设置为在该视图中播放.

如果您使用第二种方法,则只需将片段加载到适当的容器中,初始化YouTubePlayer并播放视频.

解决方案1

从XML和您的代码中删除YouTubePlayerView,并将其替换为包含YouTubeSupportFragment的FrameLayout.然后,使用ChildFragmentManager在该FrameLayout中加载YouTubeSupportFragment.

解决方案2

只需让您的活动扩展YouTubeBaseActivity,保留其他所有内容.

标签:android,android-fragments,video,youtube,youtube-api
来源: https://codeday.me/bug/20190725/1528441.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有