在 WebView 中播放的 YouTube 视频在全屏显示时显示黑屏

2023-12-23

简洁版本:为了播放 YouTube 视频,我使用这样的 WebView,

webView.loadData("<style> body{margin:0; background-color:black;}div{width:100%; height:100%; background-color:black}iframe{ width:100%; height:100%; border:none; overflow:hidden; }</style><div><iframe src=\"http://www.youtube-nocookie.com/embed/4eO9SS3wvLY?autoplay=1&rel=0&app=youtube_gdata&fs=1" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" webkitallowfullscreen=\"webkitallowfullscreen\"></iframe></div>", "text/html", "utf-8");

一切正常,除了单击 [ ] 图标将视频全屏显示时,第一次、第二次和第三次尝试时显示黑屏。在第四次尝试时,它通常会正确地全屏显示视频。然而,情况并非总是如此。

Note:对于 Twitter 和 Facebook 视频,按预期全屏播放。

长版:

我用来实现此目的的代码是,

public class Test1Activity extends AppCompatActivity {

ViewGroup rootView;

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

    rootView = findViewById(R.id.container);

    WebView webView = findViewById(R.id.web_view);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.setWebChromeClient(new WebChromeClient() {

        private View viewTakingFullScreen;

        @Override
        public void onShowCustomView(View view, CustomViewCallback callback) {
            //Log.d(TAG, "onShowCustomView(View:" + view + ", CustomViewCallback:" + callback + ")");
            super.onShowCustomView(view, callback);

            if (view instanceof FrameLayout) {
                // a video wants to be shown fullscreen
                viewTakingFullScreen = view;
                WindowManager.LayoutParams attrs = getWindow().getAttributes();
                attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
                attrs.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
                getWindow().setAttributes(attrs);
                rootView.addView(view, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

            }


        }

        @Override
        public void onHideCustomView() {
            //Log.d(TAG, "onHideCustomView()");
            super.onHideCustomView();

            if (viewTakingFullScreen != null) {
                WindowManager.LayoutParams attrs = getWindow().getAttributes();
                attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
                attrs.flags &= ~WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
                getWindow().setAttributes(attrs);
                int index = rootView.indexOfChild(viewTakingFullScreen);
                rootView.removeViewAt(index);
                viewTakingFullScreen = null;
            }
        }
    });

    String htmlContent = "<style> body{margin:0; background-color:black;}div{width:100%; height:100%; background-color:black}iframe{ width:100%; height:100%; border:none; overflow:hidden; }</style><div><iframe src=\"http://www.youtube-nocookie.com/embed/4eO9SS3wvLY?autoplay=1&rel=0&app=youtube_gdata&fs=1\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" webkitallowfullscreen=\"webkitallowfullscreen\"></iframe></div>";
    webView.loadData(htmlContent, "text/html", "utf-8");
    //webView.loadUrl("http://www.youtube-nocookie.com/embed/4eO9SS3wvLY?autoplay=1&rel=0&app=youtube_gdata&fs=1");
    }

}

这是我正在使用的布局(activity_test1.xml)文件,

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Top Button" />

        <WebView
            android:id="@+id/web_view"
            android:layout_width="match_parent"
            android:layout_height="450dp">

        </WebView>

    </LinearLayout>

</FrameLayout>

我已经尝试调试这个问题两天了,但没有成功。我觉得问题可能出在使用 YouTube 嵌入播放器<iframe>标签。但我在日志中没有看到错误的迹象。

另外,我正在使用<iframe>也可以播放 Twitter 和 Facebook 视频。但推特视频有<video>标签和 Facebook 视频有自己的嵌入播放器(https://www.facebook.com/video/embed?video_id= https://www.facebook.com/video/embed?video_id={如果})。他们似乎在全屏下工作得很好。


None

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

在 WebView 中播放的 YouTube 视频在全屏显示时显示黑屏 的相关文章

  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • 在 RESTful Web 服务中实现注销

    我正在开发一个需要注销服务的移动应用程序 登录服务是通过数据库验证来完成的 现在我陷入了注销状态 退一步 您没有提供有关如何在应用程序中执行身份验证的详细信息 并且很难猜测您在做什么 但是 需要注意的是 在 REST 应用程序中 不能有会话
  • 仅当显式选择行时才关闭 ui-bootstrap typeahead

    我创建了这个jsBin http jsbin com livuqafe 2 edit来证明我遇到的问题 如果您转到此处 请尝试输入 五 并继续 你的自然反应是输入 五 然后按 Tab 如果你想要 五百 你可以向下箭头一次 但是 在这种情况下
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data
  • php 数组中出现意外的 json 输出结构

    我正在尝试转换动态数据 如何从 PHP 获取此 JSON JSON 122240cb 253c 4046 adcd ae81266709a6 item 0 3 这就是我所做的 但它不起作用 PHP json array 122240cb 2
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • Amazon RDS for SQL Server 是否支持 SSIS?

    从谷歌搜索中读到一些相互矛盾的答案 不确定答案是是 否还是可能 我觉得读的时候已经很清楚了this http docs aws amazon com AmazonRDS latest UserGuide CHAP SQLServer htm
  • NSArrayController 无需将大型数据集加载到数组中

    我想使用 NSArrayController 向 NSTableView 提供数据 我面临的问题是我不想将所有数据预先加载到数组中 然后使用数组控制器setContent 方法 我的数据模型是一个管理数百万条记录的大型现有代码库 它包含有效
  • 一种无需 JavaScript 即可在 PHP 中确定浏览器宽度的方法?

    首先有吗 或者我必须使用javascript 我希望能够更改使用的 CSS 因此 frex 我可以为移动设备或其他设备加载较小的字体 不幸的是 仅使用 PHP 无法检测用户分辨率 如果您使用 Javascript 则可以在 cookie 中
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 如何修复:“无法解析类型 java.lang.CharSequence。它是从所需的 .class 文件间接引用的”消息? [复制]

    这个问题在这里已经有答案了 我正在尝试使用这个字符串 amountStr amountStr replace replace replace 但我收到一条错误消息 我知道我收到的错误消息是因为我刚刚发布的字符串已过时 所以我想知道该字符串的
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前
  • Android 材料芯片组件崩溃应用程序。无法膨胀 xml

    Tried Chip来自两个支持库的组件 com google android support design 28 0 0 rc01和材料 com google android material material 1 0 0 rc01 堆栈
  • 禁用允许文本选择的

    残疾人可以吗
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording
  • 探查器模板可以迁移到较新版本的 SQL Profiler 吗?

    是否可以将 Profiler 模板迁移到较新版本的 SQL Server 就我而言 我想将 SQL 2008 模板带到 2012 年 我尝试过 1 直接文件复制和 2 导出 导入 在这两种情况下 旧模板都会运行 但无法修改 修改后会出现以下

随机推荐

  • 在 Java8 中设置 LocalDateTime 和时区的格式

    我有这个简单的代码 DateTimeFormatter FORMATTER DateTimeFormatter ofPattern yyyyMMdd HH mm ss SSSSSS Z LocalDateTime now format FO
  • 视图中的 HttpContext.User 或 Page.User?

    如果我在 Asp net MVC 的视图中编码并且我想获取当前用户 那么使用是否更好 Page User or HttpContext User 有区别吗 Page User回报this Context User这与HttpContext
  • ChromeDriver 控制台应用程序隐藏

    我创建了一个播放器 它将使用 C 中的 selenium 和 ChromeDriver 来自动化 chrome 运行良好 我面临的问题是 当它为 ChromDriver 创建对象时 它将启动 ChromeDriver 应用程序 该应用程序会
  • 反应事件未触发

    在与 img 标签并熟悉 React 我发现我的onLoad and onError事件没有触发 在将我的使用简化为最基本的 React 组件之后 我仍然发现事件没有触发 在下面的组件中 我希望单击渲染的 div 登录到控制台 它渲染得很好
  • Woocommerce - 产品页面中的描述

    我需要在 Woocommerce 插件中添加我的 产品 描述的一些摘录 我有这样的页面 http exploreprague cz guides buddies 2 http exploreprague cz guides buddies
  • 用户使用 Azure AD 身份验证登录后调用适用于 Teams 的图形 API

    在用户使用 Azure AD 登录应用程序后 我们尝试使用 Microsoft Graph API for Teams 用户应该能够向应用程序内的 Teams 频道发送消息 我试图得到访问令牌登录用户并将其作为不记名令牌传递给图形 API
  • 如何使用 transclude 将 ngRepeat“模板”传递给 ngDirective?

    Demo http plnkr co edit TiH96FCgOGnXV0suFyJA p preview http plnkr co edit TiH96FCgOGnXV0suFyJA p preview 我有一个名为 myDirect
  • 避免壁纸横跨 5 个屏幕

    我一直面临一个问题 如何在 Android 中设置壁纸 而不将其拉伸到 5 个主屏幕 需要明确的是 我有一个分辨率为 320x480px 的资源图像 当我在 Android 中将其设置为壁纸时 它会拉伸到 5 个屏幕 但我希望它仅显示在 1
  • 不允许 > 2mb 的图像

    你好 如何检查用户是否尝试上传大于 2mb 的文件 我想否认这一点 并向尝试这样做的用户发出错误消息 我知道是这样的 但是我该如何将 50000 更改为 2mb 呢 if FILES imagefile size gt 50000 die
  • 为什么使用片段?

    我已阅读文档并其他一些问题的主题 https softwareengineering stackexchange com q 200583 127226对于这个话题 我并没有真正被说服 我不清楚使用这种技术的局限性 碎片现在被视为最佳实践
  • 如何使用 mongodb 和 php 正确处理分页查询?

    我这样做对吗 我查看了一些使用 MySQL 的旧 PHP 代码 并设法让它工作 但是我想知道是否有一种更 干净 和 更快 的方法来完成此任务 首先我需要获取 文档 的总数 total documents collection gt find
  • 如果不是 SwingUtilities.invokeLater(),Java 剪贴板将忽略用户副本

    Problem 以编程方式在 Java 中设置剪贴板内容 然后获取剪贴板文本永远不会反映手动剪贴板内容更改 但是 推迟通过 SwingUtilities invokeLater 获取剪贴板文本直到处理完所有 Swing 事件确实反映了当前和
  • PinnedHeaderListView 示例

    我想实现一个列表视图 其部分标题类似于 Android 移动联系人中的部分标题 其中部分标题在滚动标题内的内容时不会滚动 我发现必须实现类似 PinnedHeaderListView 的东西 有人有关于如何开发 PinnedHeaderLi
  • javascript每9秒循环一次?

    我正在开发一个html5应用程序 我希望在写入随机位置8秒后 如果你赢了或没有赢一秒钟 它将写入 然后它将从创建一个新的随机开始 我已经尝试过但它似乎没有做任何事情 如果我写 while true 浏览器就会崩溃 有什么办法可以解决吗 jQ
  • TypeScript 第二个参数类型基于第一个参数类型

    我有第一个参数的可能值的枚举 并且我希望第二个参数基于第一个参数 因此 如果给出 NAME 我希望第二个参数为字符串 如果给出 AGE 我希望第二个参数是一个数字 我怎样才能做这样的事情 enum KeyType NAME AGE clas
  • 如何在mingw中静态链接libwinpthread-1.dll?

    我从这里使用 mingw http sourceforge net projects mingwbuilds files host windows releases 4 7 2 32 bit threads posix sjlj x32 4
  • Python:确定未排序的列表是否包含在“列表的列表”中,无论元素的顺序如何

    我有一个与这个问题类似的问题 确定 2 个列表是否具有相同的元素 无论顺序如何 https stackoverflow com questions 8866652 determine if 2 lists have the same ele
  • 如何使用 boost::spirit::lex 实现包含指令?

    我有一个由spirit lex 和spirit qi 构建的简单配置文件解析器 当词法分析器到达模式时include path 我希望包含文件的文本 如您所知 spirit lexer begin 启动扫描过程 Read file cont
  • JetBrains WebStorm 忽略缩进设置

    In Settings gt Code Style gt JavaScript我已经设置了Tab size and Indent4 为什么WebStorm仍然忽略这些设置 正如您在预览窗口中看到的 哪些设置可以覆盖这些设置 如果您启用了 E
  • 在 WebView 中播放的 YouTube 视频在全屏显示时显示黑屏

    简洁版本 为了播放 YouTube 视频 我使用这样的 WebView webView loadData div div