一项活动中有多个 YouTube 玩家

2024-05-06

我正在使用 Youtube Android Player API,如下所述:https://developers.google.com/youtube/android/player/ https://developers.google.com/youtube/android/player/

但是,我无法同时将多个视频添加到我的活动中。我尝试简单地将两个 YouTubePlayerViews 放入活动中,如下所示:

活动主文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin" >

    <com.google.android.youtube.player.YouTubePlayerView
        android:id="@+id/view_one"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <com.google.android.youtube.player.YouTubePlayerView
        android:id="@+id/view_two"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

MainActivity.java

package com.example.multidemo;

import android.os.Bundle;

import com.google.android.youtube.player.YouTubeBaseActivity;
import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayer.Provider;
import com.google.android.youtube.player.YouTubePlayerView;

public class MainActivity extends YouTubeBaseActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ((YouTubePlayerView) findViewById(R.id.view_one)).initialize("API key", new YouTubePlayer.OnInitializedListener() {
            @Override
            public void onInitializationSuccess(Provider arg0, YouTubePlayer arg1, boolean arg2) {
                arg1.cueVideo("RpwoN_XlN6Y");
            }

            @Override
            public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) {
            }
        });

        ((YouTubePlayerView) findViewById(R.id.view_two)).initialize("API key", new YouTubePlayer.OnInitializedListener() {
            @Override
            public void onInitializationSuccess(Provider arg0, YouTubePlayer arg1, boolean arg2) {
                arg1.cueVideo("jkk2mMq2x8E");
            }

            @Override
            public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) {
            }
        });
    }
}

当我尝试此操作时,第一个视图只是显示黑色,而第二个视频加载。如果我注释掉第二个视频的 onCreate() 中的代码,则只会加载第一个视频。

有没有办法让多个 YouTubePlayerViews 进入同一个活动?


这可能为时已晚,但我最近也遇到了同样的问题。希望这对可能面临同样问题的人有所帮助。解决这个问题的技巧是使用 YoutubePlayerFragments 代替。只要您使用 Youtube 播放器视图,您就会遇到多个请求中只能完成一次初始化的限制。通常最后一个初始化会成功。

我最终动态生成网格布局并将我的(动态生成的)片段视图放置在每个单元格中。然后我在 onResume 中初始化播放器的实例。初始化成功后,您将获得播放器的句柄,并且可以在片段上随机提示不​​同的视频。

我将粘贴代码,让您了解我如何构建片段并进行初始化:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) 
{
    mLogger.i("Preparing Youtube view for fragment ..");
    mFragmentHeight = CustomFragment.getFragmentHeight(mNumScreens,mNumColumns);
    mFragmentWidth = CustomFragment.getFragmentWidth(mNumColumns);

    LinearLayout linearLayout = new LinearLayout(getActivity());
    GridLayout.LayoutParams gridparams = new GridLayout.LayoutParams();
    gridparams.rowSpec = GridLayout.spec(mGridRow);
    gridparams.columnSpec = GridLayout.spec(mGridColumn);
    gridparams.height = mFragmentHeight;
    gridparams.width = mFragmentWidth;
    linearLayout.setLayoutParams(gridparams);
    if(YouTubeApiServiceUtil.isYouTubeApiServiceAvailable(getActivity())==
            YouTubeInitializationResult.SUCCESS)
    {
        View ytView = super.onCreateView(inflater, container, savedInstanceState);
        linearLayout.addView(ytView);
    }
    else
        mLogger.e("Either youtube service is down," +
                " or you dont have required version of YouTube app .." +
                "\nYouTube Fragment will not work as expected..");
    mView = linearLayout;
    mLogger.i("Preparation youtube view for fragment complete..");
    return mView;
}

@Override
public void onInitializationFailure(Provider arg0,
        YouTubeInitializationResult arg1) 
{
    mLogger.e("Youtube player initialization failed");
}

@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player,
          boolean wasRestored) 
{
    mLogger.i("You tube player initialized successfully.. will attempt to stream..");
    mYoutubePlayer = player;
    setListeners();
    try
    {
        if (!wasRestored) 
        {
            if(mPlayListFragment)
              player.loadPlaylist(getResourceID());
            else
                player.loadVideo(getResourceID());
        }
    }
    catch(Exception e)
    {
        mLogger.e("Error loading playlist/video .."+e);
    }

}

public void onResume()
{
    super.onResume();
    initialize(API_KEY, this);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一项活动中有多个 YouTube 玩家 的相关文章

随机推荐

  • 所有任务完成后继续任务

    在某些类中 我想使用 Task 异步加载 2 个集合并停止 busyindicator 我尝试这样的事情 var uiScheduler TaskScheduler FromCurrentSynchronizationContext Wai
  • 将块传递给 AFNetworking 方法?

    void getDataFromServer NSMutableDictionary dict NSURL url NSURL URLWithString NSString stringWithFormat doSomething Main
  • 如何快速从字符串中删除特定字符或单词?

    var myString 43321 This is example hahaha 4356 13 我想要的结果是 var resultString This is example 换句话说 我想删除某些单词和数字 这怎么可能 我已经进行了
  • Android 客户端中经过身份验证的 Cloud Endpoint 间歇性失败

    我有一个生产中的应用程序 在调用经过身份验证的云端点时收到大量强制 关闭 最能说明问题的是 java lang IllegalArgumentException 服务未注册 com google android gms internal e
  • dependency walker 在正确运行的系统上给我错误

    我的系统上缺少 dll 我有以下消息 无法加载文件或程序集 mydll dll 或其依赖项之一 当然 mydll 存在于此 它很可能是它所依赖的另一个 dll 我下载了 dependency walker 来检查它可能是什么 我首先在另一个
  • 获取带有注释的所有类并将它们添加到 android 中的 hashMap

    我不确定这是否可能 但我基本上希望能够轻松地将新项目添加到列表中 只需添加带有特殊注释的类即可 我能想到的唯一例子就是我目前正在做的事情 用户可以完成很多 挑战 目前我的应用程序中有一个用于 挑战 的包 我希望能够在该包中创建一个新类 给它
  • 来自函数参数的动态 Typescript 对象属性

    我有一个函数 它接受一个n参数的数量 并生成一个新对象 其中包含参数到唯一哈希的键值映射 Typescript 有没有办法从函数的参数动态推断返回对象的键 Example 生成字典的CreateActionType函数 function c
  • 使用 qtp 功能单击特定链接

    我想通过创建一个在操作中调用的函数来自动执行 Flipkart 的登录过程 Function Website this is the function Systemutil Run iexplore exe http www flipkar
  • VBA写入Word,更改字体格式

    我正在 Excel 中编写 VBA 脚本 以将基于某些表格的文本输出到 Word 文档 在大多数情况下 一切都很顺利 我在 stackoverflow 的帮助下自学 我有一个相当长的代码 因此将其全部复制到这里会很困难 我将尝试展示相关部分
  • 时间序列数据 - 如何[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在考虑进行一项为期一个月的研究 受试者记录他的饮酒量和排尿频率 我想让受试者每天记录这些活动 这样我就有一个月的数据 每天的排尿次
  • Kubernetes Pod 动态环境变量

    我需要能够将自定义环境变量分配给 Pod 的每个副本 一个变量应该是一些随机的 uuid 另一个唯一的数字 怎么可能实现呢 我更愿意继续使用带有副本的 部署 如果这不是开箱即用的 如何通过自定义复制控制器 控制器管理器来实现 有没有可用的钩
  • 使用 SESSION_CONTEXT 的实体框架核心行级安全性

    我正在使用 ASP NET Core 和 Entity Framework 7 Core 编写一个使用行级安全性的多租户应用程序 由于我的数据库托管在 Microsoft SQL Server 上 因此我使用了this https msdn
  • Facebook 点赞按钮点赞错误的网址

    如果我尝试制作一个 facebook like 按钮来喜欢以下网址 http go style co uk nggallery page 7029 image 35 该按钮喜欢以下网址 http go style co uk test ga
  • 如何以编程方式创建证书签名请求 (CSR)?

    如何用C实现呢 openssl req new key cert key out cert csr openssl x509 req in cert csr CA rootCA crt CAkey rootCA key CAcreatese
  • Monolog Logger 在每个日志消息的末尾输出空数组

    我的记录器对象在每行末尾输出空数组 例如 2017 08 17 12 26 02 import log INFO checkForDuplicates is processing 2017 08 17 12 26 04 import log
  • 如何使用 JavaFX 中的 JCSG 库将 MeshView 转换为 CSG 对象

    我正在使用 JavaFX 的 JCSG 库 我有一些MeshView我想将它们转换成的对象CSG对象 有办法实现吗 最简单的方法是组合javafx scene shape Mesh对象与 CSG 对象 前提是您有TriangleMesh正在
  • BlackBerry - 带居中位图的 ButtonField

    我有一个从 ButtonField 扩展的类 class BitmapButtonField extends ButtonField private Bitmap bitmap private int buttonWidth private
  • XML 序列化基类列表

    我有课A从类继承B 我有一个班级名单B其中包含A and B items List b myList new List b myList Add new A 当我尝试使用序列化此列表时XmlSerializable 抛出异常 如果我将列表定
  • Doctrine/Symfony 如何使用数组中的特定数据更新实体

    我环顾四周太久了 但没有运气 我的情况是 我有一个有点大的表 60 列 在 Doctrine Entity 中表示 在 FosREST 上工作 我想要实现的是 我想发送带有特定数据的 JSON 例如 phone gt new phone n
  • 一项活动中有多个 YouTube 玩家

    我正在使用 Youtube Android Player API 如下所述 https developers google com youtube android player https developers google com you