使用 youtube 播放器 api 在后台播放 Youtube 视频

2023-11-24

我已经使用成功播放了 YouTube 视频youtube player api。但我需要在按下后退按钮时在后台运行它。我用谷歌搜索了很多,但没有找到任何结果请帮助我实现这一目标。提前致谢

这是我的代码-

public class FullscreenDemoActivity extends YouTubeFailureRecoveryActivity
        implements View.OnClickListener,

        YouTubePlayer.OnFullscreenListener {
//  private MyPlaybackEventListener myPlaybackEventListener;
    private static final int PORTRAIT_ORIENTATION = Build.VERSION.SDK_INT < 9 ? ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
            : ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT;

    private LinearLayout baseLayout;
    private YouTubePlayerView playerView;
    public YouTubePlayer player;
    private Button fullscreenButton;
    private CompoundButton checkbox;
    private View otherViews;

    private boolean fullscreen;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.fullscreen_demo);
        baseLayout = (LinearLayout) findViewById(R.id.layout);
        playerView = (YouTubePlayerView) findViewById(R.id.player);
        fullscreenButton = (Button) findViewById(R.id.fullscreen_button);
        checkbox = (CompoundButton) findViewById(R.id.landscape_fullscreen_checkbox);
        otherViews = findViewById(R.id.other_views);
        playerView.initialize(DeveloperKey.DEVELOPER_KEY, this);

    }

    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider,
            YouTubePlayer player, boolean wasRestored) {
        this.player = player;
        setControlsEnabled();
        // Specify that we want to handle fullscreen behavior ourselves.
        player.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CUSTOM_LAYOUT);
        player.setOnFullscreenListener(this);
        if (!wasRestored) {
            player.cueVideo("avP5d16wEp0");
        }
        int controlFlags = player.getFullscreenControlFlags();
        setRequestedOrientation(PORTRAIT_ORIENTATION);
        controlFlags |= YouTubePlayer.FULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE;
        player.setFullscreenControlFlags(controlFlags);
        player.play();


    }

    @Override
    protected YouTubePlayer.Provider getYouTubePlayerProvider() {
        return playerView;
    }

    @Override
    public void onClick(View v) {
        player.setFullscreen(!fullscreen);
    }



    private void doLayout() {
        LinearLayout.LayoutParams playerParams = (LinearLayout.LayoutParams) playerView
                .getLayoutParams();
        if (fullscreen) {
            // When in fullscreen, the visibility of all other views than the
            // player should be set to
            // GONE and the player should be laid out across the whole screen.
            playerParams.width = LayoutParams.MATCH_PARENT;
            playerParams.height = LayoutParams.MATCH_PARENT;

            otherViews.setVisibility(View.GONE);
        } else {
            otherViews.setVisibility(View.VISIBLE);
            ViewGroup.LayoutParams otherViewsParams = otherViews
                    .getLayoutParams();
            if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
                playerParams.width = otherViewsParams.width = 0;
                playerParams.height = WRAP_CONTENT;
                otherViewsParams.height = MATCH_PARENT;
                playerParams.weight = 1;
                baseLayout.setOrientation(LinearLayout.HORIZONTAL);
            } else {
                playerParams.width = otherViewsParams.width = MATCH_PARENT;
                playerParams.height = WRAP_CONTENT;
                playerParams.weight = 0;
                otherViewsParams.height = 0;
                baseLayout.setOrientation(LinearLayout.VERTICAL);
            }
            setControlsEnabled();
        }
    }

    private void setControlsEnabled() {
        checkbox.setEnabled(player != null
                && getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT);
        fullscreenButton.setEnabled(player != null);
    }

    @Override
    public void onFullscreen(boolean isFullscreen) {
        fullscreen = isFullscreen;
        doLayout();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        // System.out.println(getScreenOrientation());
        doLayout();
    }

    private final class MyPlaybackEventListener implements PlaybackEventListener {

          private void updateLog(String prompt){
        System.out.println(prompt);
          };

          @Override
          public void onBuffering(boolean arg0) {
           updateLog("onBuffering(): " + String.valueOf(arg0));
          }

          @Override
          public void onPaused() {

           updateLog("onPaused()");
          }

          @Override
          public void onPlaying() {
           updateLog("onPlaying()");

          }

          @Override
          public void onSeekTo(int arg0) {
           updateLog("onSeekTo(): " + String.valueOf(arg0));
          }

          @Override
          public void onStopped() {
              player.loadVideo("avP5d16wEp0");

              player.cueVideo("avP5d16wEp0");
              player.play();
           updateLog("onStopped()");
          }

         }

}

我搜索了该主题,发现没有官方方法,也不会按照这一页在谷歌代码上。

他们在其中建议你创建一个玩家。

隐藏播放器。

将播放器静音。

使用您的 videoId 和可选偏移量调用eekTo()。

等待状态更改为“正在播放”。

按暂停键。

调用seekTo(originalOffset, false)。

取消播放器静音。

向玩家展示。 (管他呢)。

它可能无法满足您的需要,但也许您可以使用此方法更改实现目标所需的内容。

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

使用 youtube 播放器 api 在后台播放 Youtube 视频 的相关文章

  • 改造中如何使用HashMap发布数据?

    您能解释一下如何使用以下方式发布数据吗hashmap in 改造2 这就是我发的帖子 FormUrlEncoded POST getProfile Call
  • 代码如何从 Android Gallery 加载图像

    我有用于从图库加载图像的代码 但我真的不明白它是如何工作的 这是代码 Override protected void onActivityResult int requestCode int resultCode Intent data s
  • 使用 android 将图像上传到 Flickr

    我需要将 Flickr 与 android 集成 我已完成身份验证 我需要将图像上传到 flickr 但我不知道如何执行相同操作 我参考文件 http www flickr com services api upload api html
  • 如何创建没有标题的DialogFragment?

    我正在创建一个 DialogFragment 来显示一些有关我的应用程序的帮助消息 除了一件事之外 一切都工作正常 窗口顶部有一条黑色条纹 显示 DialogFragment 我认为它是为标题保留的 我不想使用它 这是特别痛苦的 因为我的自
  • 清除堆内存以防止内存不足异常

    我知道已经有人问过有关内存不足的问题 但我没有找到解决方案 在位图工厂中 我出现内存不足异常 甚至使用 inSampleSize 1 所以我经常用 try catch 内存不足异常来包围它 因为这是一个不好的做法 try catch Out
  • 使用 HashMap 映射 String 和 int

    我有一个显示国家 地区名称的列表视图 我已将名称作为字符串数组存储在 strings xml 中 称为国家 地区名称 在填充 ListView 时 我使用从 strings xml 读取的 ArrayAdapter String count
  • Android 操作栏 SearchView 作为自动完成功能?

    我在操作栏中使用 SearchView 我想在搜索视图上使用自动完成功能来从数据库中获取结果 这可能吗 或者我是否需要使用自定义文本框 然后添加自动完成功能 所以我只需要对 v7 版本执行此操作 并沮丧地发现我不能简单地使用 ArrayAd
  • 尝试在谷歌地图V2 Android应用程序中获取空数组的长度

    我目前正在使用谷歌地图API开发一个Android应用程序 有时我会因为没有明显的原因而发生奇怪的崩溃 在我看来 这是崩溃日志 12 02 16 38 57 071 20796 21137 com appsolute ParkYoo E A
  • Android 偏好设置中的“是”或“否”确认[重复]

    这个问题在这里已经有答案了 我需要在 设置 中实现 重置 选项 单击该设置后 将打开一个简单的对话框 要求确认 我看过了DialogPreference但我似乎无法在任何地方找到好的解决方案或教程 有人可以帮我吗 我是初学者 想法甚至代码都
  • MyGestureDetector 扩展了 SimpleOnGestureListener

    我正在实现一个扩展 SimpleOnGestureListener 的 MyGestureDetector 我从以下机构借了课程 http www codeshogun com blog tag view flipper http www
  • Google Play 服务,登录成功,但创建房间时出错

    我正在尝试 google play 服务示例 特别是 ButtonClicker2000 从 logcat 登录过程也正常 但我有另一个错误 06 01 22 43 15 478 D ButtonClicker2000 1565 Sign
  • java.exe 以非零退出值 1 结束

    只是为了开始 我并不是真正尝试从 Android 中的 xlsx 文件中读取单元格 我已经尝试了几乎所有我在 Google 上搜索到的内容 但是每次 在两台不同的 PC 上 都是 Java 1 7 0 79 当我尝试构建 运行 这个应用程序
  • 从字符串中删除重音符号

    Android 中有没有什么方法 据我所知 没有 java text Normalizer 可以从字符串中删除任何重音 例如 变成 eau 如果可能的话 我想避免解析字符串来检查每个字符 java text NormalizerAndroi
  • Android 导航 DeepLinks - 如何区分使用导航操作进行导航与深层链接

    我有导航操作和深层链接 根据您导航的位置 将您带到某个片段 我想确定是使用了深层链接还是仅使用了导航操作 这正是KEY DEEP LINK INTENT https developer android com reference andro
  • 地理围栏不可用以及如何处理

    我正在 Android 上使用地理围栏 它在大多数手机上都工作正常 但在其中一些上 它不起作用 在我的错误日志中显示 地理围栏不可用 某些用户没有为 Google Play 服务启用位置跟踪 我认为这就是地理围栏在他们的手机上不起作用的原因
  • Meteor:即使设置了 ANDROID_HOME 也未设置

    操作系统 Ubuntu 14 04 框架 流星1 1 0 2 应用名称 Songofy 这是输出meteor install sdk android meteor install sdk android Found Android bund
  • 在 Tensorflow-lite Android 中将位图转换为 ByteBuffer(浮点)

    在用于图像分类的tensorflow lite android演示代码中 图像首先转换为ByteBuffer格式以获得更好的性能 这种从位图到浮点格式的转换以及随后到字节缓冲区的转换似乎是一个昂贵的操作 循环 按位运算符 float mem
  • 如何像UCBrowser一样使用webview打开url

    我是安卓新手 我正在尝试制作一个示例应用程序来在 webview 中打开网站 问题是 网站以桌面模式打开 如何才能像UC浏览器 手机模式 一样打开网站 尝试这个 它应该有效 webview1 getSettings setJavaScrip
  • 调用外部应用程序

    如何从我的应用程序调用外部应用程序 例如 我需要打电话Shazam 应用程序 来自我的应用程序 我可以在应用程序的包名称中看到logcat 这对任何目的都有用吗 特别是对于 Shazam 以下代码有效 Intent intent new I
  • FragmentMap + ActionBar 选项卡

    我一直在尝试插入一个MapView进入一个ActionBar Tab 但我什至无法解决问题 即使谷歌搜索 这是主要活动 Override public void onCreate Bundle savedInstanceState supe

随机推荐

  • React:推荐箭头还是普通函数?

    在我觉得手动函数 对象绑定和范围相关问题很令人头痛之后 我开始使用箭头函数 但最近我开始知道使用普通函数 ES5 比箭头函数 ES6 更好 我对这些功能的理解 React 中的正常功能 手动绑定对象 函数 以便在函数内使用状态或道具并避免与
  • JavaScript 的解析会识别什么字符串日期格式?

    我知道在构建一个DateJavaScript 中的对象带有dateString参数 字符串必须是parse 能认出来 什么日期格式可以parse认出 例如 var postDate new Date 2011 03 08T23 52 38
  • 如何在 Jackson 中指定反序列化顺序?

    我有两个字段 startDate and endDate我需要确保结束日期等于或晚于开始日期 最好的方法是什么 我想确保endDate之后被反序列化startDate 所以我可以将逻辑放入其 setter 方法中 例如 JsonSetter
  • Pyomo 无法找到 GLPK 解算器

    我正在尝试将 GLPK 解算器与 Pyomo 一起使用 我有一个已经过测试的工作模型 但不断收到错误消息 提示无法找到 GLPK 警告 无法找到解算器 glpk 所需的 glpsol 可执行文件 我已经成功安装glpk 我还将目录添加到路径
  • 分配给较大宽度整数时的 C 整数溢出行为

    如果我在 C 中执行以下代码 include
  • 为什么我的应用程序无法在 Heroku 上建立 websocket 连接?

    我正在尝试在heroku 上部署我的nodejs 应用程序 我无法建立 websocket 连接 我已经阅读了我能找到的所有内容 尝试了每个示例 但似乎没有一个对我有用 当我尝试打开我的页面 heroku open 时 nodejs 正确地
  • C# 中的 HttpWebRequest 不适用于 .net 4.5

    我正在开发一个 C 项目 该项目将 xml 发送到服务器并接收 xml 作为响应 安装 Net Framework 4 0 后 可以正常工作 安装 Net Framework 4 5 后 它会抛出此异常 System NullReferen
  • 是否可以在 Rails 中创建两个日期之间的月份列表

    我正在尝试创建一个页面来显示每个月的链接列表 按年份分组 月份必须位于 今天 和 首次输入的日期 这两个日期之间 我在砖墙上 我不知道如何创建它 任何帮助将不胜感激 问候 亚当 只需将您想要的内容放入范围循环中并使用 Date MONTHN
  • Flutter:将 Widget 的边缘与第二个 Widget 重叠

    我想将一个小部件的底部边缘与另一个小部件重叠 使其看起来像这样 我正在使用堆栈将箭头按钮放置在卡片上 目前我只是设置了位置 上面有一个看不见的框 问题是这种方法仅适用于确切的分辨率 它应该与屏幕尺寸无关 小部件的必要代码 Stack chi
  • 增加 catalina.bat 文件中堆大小的最佳方法

    我在 windows xp 上有 tomcat 6 服务器 并且我通过控制台启动 tomcat 即使用startup bat AFAIK catalina bat文件适用于 Windows 因此我正在更改 bat 文件以进行内存管理 我没有
  • 如何调用Web服务方法进行测试,例如从浏览器

    有一个 dll webservice 用 Delphi 制作 有一个名为List它返回字符串列表 宽字符串 是否有任何方法可以调用该服务而无需编写客户端应用程序来使用它 Ex http misitio com 8080 miwebservi
  • Emacs 24内置cedet功能亮点

    我想去掉上面的下划线功能 例如 如上面 void 的屏幕截图所示 http cedet sourceforge net img gen semantic ia complete menu png 我在文档中找不到任何明显的内容 但哎呀 我什
  • 将行替换为空格,将反斜杠替换为包含空格的字符串

    我想替换以下行 memory 20g with memory 100g 实际上它应该替换之后的任何数字 memory 以下是我所拥有的 但无法获得预期的结果 sed i E s b memory memroy 100g g a txt 您不
  • 如何在代码外部(即 XML 文件中)定义 AutoMapper 映射,或使用不同的方法来实现完全可配置的对象映射?

    EDIT 最初我打算使用 AutoMapper 来实现我的目标 但我必须知道 AutoMapper 并不是这样工作的 它使您可以创建配置文件 但在我的情况下 完全可配置 我需要为每个参数组合一个配置文件 所以我想出了一种自己的方法 请参阅答
  • AngularJS - jQuery UI - 绑定问题

    我目前正在将一个大型应用程序移植到一个基于 HTML5 的 Web 应用程序 我已经开始在 AngularJS 中构建该应用程序并享受 AngularJS 框架的强大功能 目前我遇到一个问题 我有一个指令为我提供了 jQuery Datep
  • 如何让 Python / PostgreSQL 更快?

    现在我有一个日志解析器读取 515mb 的纯文本文件 过去 4 年里每天的一个文件 我的代码目前是这样的 http gist github com 12978 我已经使用了 psyco 如代码中所示 并且我也在编译它并使用编译后的版本 它每
  • 如何将 tail -f 通过管道传输到 awk 中

    我正在尝试设置一个脚本 当日志文件中出现某个字符串时 会生成警报 已有的解决方案每分钟一次 grep 整个日志文件 并计算字符串出现的频率 使用日志行的时间戳仅计算前一分钟的出现次数 我认为用尾巴来做这件事会更有效 所以我尝试了以下方法作为
  • ASP.NET中如何在Web表单之间传递信息

    如何在asp net中将一些信息从一个Web表单发送到另一个Web表单 第一个网页表单是HumanList aspx显示a中的人类列表GridView成分 当用户单击编辑链接时 我想传递 humanID 人类记录 ID 的值 HumanLi
  • Google 自动完成教程为 swift 放置 api

    我想要一个自动完成文本字段 可以像 Android 一样自动完成位置 https developers google com places training autocomplete android 有谁知道我在哪里可以找到这方面的教程或示
  • 使用 youtube 播放器 api 在后台播放 Youtube 视频

    我已经使用成功播放了 YouTube 视频youtube player api 但我需要在按下后退按钮时在后台运行它 我用谷歌搜索了很多 但没有找到任何结果请帮助我实现这一目标 提前致谢 这是我的代码 public class Fullsc