Android 退出全屏后嵌入式 IFRAME 视频继续在后台播放

2024-04-26

我已经搜索了很多解决这个问题的方法,但显然我找不到。 嗯,顾名思义,我有一个简单的 Android 应用程序,它有一个 Webview。

public class MainActivity extends Activity {
   protected FrameLayout webViewPlaceholder;
   protected WebView webView;
   final Context myApp = this;
   @Override
   public void onCreate(Bundle savedInstanceState)
   {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      // Initialize the UI
      initUI();
   }

   protected void initUI()
   {
    // Retrieve UI elements
    webViewPlaceholder = ((FrameLayout)findViewById(R.id.webViewPlaceholder));

    // Initialize the WebView if necessary
    if (webView == null)
    {
        // Create the webview
        webView = new WebView(this);
        webView.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        webView.getSettings().setSupportZoom(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        webView.setScrollbarFadingEnabled(true);
        webView.getSettings().setLoadsImagesAutomatically(true);

        // Load the URLs inside the WebView, not in the external web browser
        webView.setWebViewClient(new WebViewClient());
        //webView.setWebChromeClient(new CustomChromeClient(this));
        webView.setWebChromeClient(new WebChromeClient() {  
            @Override  
            public boolean onJsAlert(WebView view, String url, String message, final android.webkit.JsResult result)   
            {  
                new AlertDialog.Builder(myApp)  
                    .setTitle("javaScript dialog")  
                    .setMessage(message)  
                    .setPositiveButton(android.R.string.ok,  
                            new AlertDialog.OnClickListener()   
                            {  
                                public void onClick(DialogInterface dialog, int which)   
                                {  
                                    result.confirm();  
                                }  
                            })  
                    .setCancelable(false)  
                    .create()  
                    .show();  

                return true;  
            };
            public void onShowCustomView(View view, CustomViewCallback callback){
                super.onShowCustomView(view, callback);
                Log.i("ChromeCLient", "onshowCustomView");
                new AlertDialog.Builder(myApp)  
                .setTitle("javaScript dialog")  
                .setMessage("ajbdlsakndsland")  
                .setCancelable(true)  
                .create()  
                .show();  
            }
            @Override
            public void onHideCustomView() {
                super.onHideCustomView();
                Log.i("ChromeCLient", "onhideCustomView");
            }
        });  

        webView.getSettings().setJavaScriptEnabled(true);
        if (Build.VERSION.SDK_INT < 8) {
          webView.getSettings().setPluginsEnabled(true);
        } else {
          webView.getSettings().setPluginState(WebSettings.PluginState.ON);
        }
        // Load a page
        webView.loadUrl("http://jsbin.com/ijixe4/3");
    }

    // Attach the WebView to its placeholder
    webViewPlaceholder.addView(webView);
}

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    if (webView != null)
    {
        // Remove the WebView from the old placeholder
        webViewPlaceholder.removeView(webView);
    }

    super.onConfigurationChanged(newConfig);

    // Load the layout resource for the new configuration
    setContentView(R.layout.activity_main);

    // Reinitialize the UI
    initUI();
}

@Override
protected void onSaveInstanceState(Bundle outState)
{
    super.onSaveInstanceState(outState);

    // Save the state of the WebView
    webView.saveState(outState);
}

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

    // Restore the state of the WebView
    webView.restoreState(savedInstanceState);
}
}

我的问题如下。 webview 中加载的网站是一个包含简单 iframe 嵌入 youtube 视频的网站。 当我点击 YouTube 视频上的全屏按钮时,它会更改我的应用程序方向,即使我在清单中设置: screenOrientation ="portrait"。 退出全屏时,播放视频时会继续播放(在后台),即使由于方向更改而重新创建了 Web 视图。 当方向从横向变为纵向时,我尝试在活动的 onDestroy() 方法中销毁 webview。但这没有帮助。 我尝试将 CustomWebChromeClient 设置为 webview 并实现 onShowCustomView() 方法,但除非我使用 HTML5 视频,否则显然不会调用 onShowCustomView() 。 我什至尝试通过方向改变来保留网络视图的状态。

你们还有其他方法来解决这个问题/错误吗? 我真的不想使用 HTML5 视频标签。 提前致谢。


只需重写 onPause 和 onResume 方法并在 webView 上调用相同的方法,如下所示。

@Override
protected void onResume() {
    super.onResume();
    this.webView.onResume();
}

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

Android 退出全屏后嵌入式 IFRAME 视频继续在后台播放 的相关文章

  • Kapt 未在即时应用程序功能模块中生成类

    我在我的 Android 应用程序中使用 dagger2 即使没有错误 它也不会生成匕首组件类 我已经在设置中启用了注释处理器并重新启动了我的 android studio 但这对我来说不起作用 我也读过这个帖子Dagger2 不生成 Da
  • startActivity overridePendingTransition 只显示进入动画

    基本上 我遇到的问题是只显示输入幻灯片动画 调用 Activity 不会产生动画 startActivity intent overridePendingTransition R anim right in partly R anim le
  • 如何从一个活动中完成一系列开放的子活动?

    我正在尝试为我的应用程序制作一个退出按钮 无论如何 我能够跟踪我的应用程序中的所有活动实例 然后完成它们 但在某些情况下 仍有一些活动仍然存在 不知道怎么办 有没有什么方法可以杀死android中的特定应用程序 或者我可以通过任何其他方式退
  • 在代码中旋转按钮(或其中的文本)

    我必须通过编码随机旋转按钮 或里面的文本 它是相同的 API级别低于11是否有button setRotate x 好吧 看了一下 答案是 很复杂 您可以使用旧的动画框架旋转按钮 例如像这样 Button button Button fin
  • 编译后从字节代码中删除注释

    我们正在使用一个包含使用 JAXB 注释进行注释的 bean 的库 我们使用这些类的方式完全不依赖于 JAXB 换句话说 我们不需要 JAXB 也不依赖注释 但是 由于注释存在 它们最终会被处理注释的其他类引用 这要求我将 JAXB 捆绑到
  • Android Facebook sdk 3.5 分享对话框

    您好 我正在为 android sdk 3 5 实现 facebook 共享对话框 但是我按照指南没有取得任何成功 FacebookDialog shareDialog new FacebookDialog ShareDialogBuild
  • Android ListView 自定义适配器 ImageButton

    这可能不是正确的方法 如果有更好的方法请告诉我 我创建了一个自定义适配器类 在我的 getView 方法中我膨胀了我想要使用的视图 public View getView int position View convertView View
  • 从 BroadcastReceiver 获取方法来更新 UI

    我正在尝试根据变量的变化更新用户界面BroadcastReceiver 因此 我需要调用一个扩展类的方法 以获取我提到的变量 BroadcastReceiver in MainActivity取决于但我无法以任何方式获得真正的返回值 扩展的
  • Android 5.0 Lollipop 中屏幕固定关闭时如何收到通知?

    我有一个在后台运行的应用程序 并在手机上发生特定事件时启动活动 我发现在 Android 5 0 中 当用户使用另一个应用程序打开屏幕固定时 startActivity intent 调用将被完全忽略 我的应用程序不知道该活动尚未启动 因此
  • 如何在 Android 应用程序中单击按钮时打开 Gmail Compose?

    当我的 Android 应用程序中单击按钮时 我尝试打开 Gmail 撰写屏幕 我需要 Google 提供的 API 密钥吗 或者我需要在按钮 onClickListener 中做什么 任何形式的见解都非常值得赞赏 正如 JeffC 指出的
  • android:进程和进程名称

    我试图理解android process属性 Ref says http developer android com guide topics manifest application element html proc 如果分配给该属性的
  • 如何更改对话框片段内的片段

    我想做一个空的DialogFragment with a LinearLayout然后更改里面的片段LinearLayout 例如 第一个片段是 3 个按钮 facebook google 电子邮件登录 的登录 当有人按下电子邮件时 第 2
  • 如何使用 Swipe 视图实现 Android TabLayout 设计支持库

    我将使用 android TabLayout 设计支持库 但我不知道如何使用滑动视图 这是我的代码 XML
  • android 多关键词搜索

    我的应用程序包含搜索功能 它将搜索数据库内的内容 我的搜索的弱点是 我只能使用一个标签进行搜索 例如我只能搜索 猫 它会返回我的数据库中包含 猫 一词的内容 因为我正在使用LIKE在 select 语句期间进行查询 如何使用多个标签进行搜索
  • Android Drawable 绘图性能?

    在我看来 我有一个简单的 ARGB 可绘制对象 大约需要 2 毫秒才能绘制 但我可以在 0 5 毫秒内绘制与位图相同的文件 只是一些快速代码 我真的不能认为它是一个选项 优化可绘制对象的绘制速度的最佳方法是什么 这取决于可绘制的数量以及每个
  • 在 android 中,第一次单击时按钮侦听器未注册

    因为我是 Android 新手 所以我遇到了按钮监听器的问题 我正在使用 OnClickListener 来处理胸像 但它第一次点击后不执行一旦我单击多个 它就会表现良好 但如何使其在第一次单击时成为可能 这是我的代码 public cla
  • 将 Crashlytics 集成到图书馆项目

    我有一个图书馆项目 自定义视图库项目 它没有任何活动 服务 我想将 Crashlytics SDK 集成到我的库中 当我尝试通过 Android Studio 的 Crashlytics 插件 工具栏中的图标 添加它时 它只是停留在 Che
  • 应用程序中空指针异常[重复]

    这个问题在这里已经有答案了 我正在尝试在我的应用程序中实施应用程序内计费 我写了这段代码 public class Settings extends PreferenceFragment ServiceConnection mService
  • 如何通过 AppCompatActivity 使用 YouTube Android 播放器 API

    为了在我的应用程序中播放视频 我决定扩展 YouTube Android Player API 但问题是我的菜单消失了 因为我没有从 AppCompatActivity 扩展 问题是 如何使用 YouTube Android Player
  • Android Jasper 报告

    Jasper Reporting 可以集成到 Android 应用程序中吗 我正在尝试从 jrxml 文件生成 PDF CSV 文本和 XLS 报告 但是 我没有看到 Android SDK 支持 net sf jasperreports

随机推荐

  • 如何轻松区分/比较 TFS 中的 2 个搁置集?

    有没有一种方法可以比较 TFS 中的 2 个搁置 而不必在单独的工作区中取消搁置并比较文件 我一直在寻找相同的东西 即比较两个书架的内容 而不需要取消其中之一的书架 最终为该功能编写一个 Visual Studio 扩展 该扩展适用于 Vi
  • 使用 WinForms 绘制宽线时出现 OutOfMemoryException

    这个太疯狂了 我只画了几千条线OnPaint处理程序 没有问题 当pen Width lt 1 或者当屏幕上没有很多行时 好的 我画了一张比例尺地图 线宽随地图缩放 当我缩放一些地图时 我得到OutOfMemoryException WHY
  • 在第三方网站的 iframe 中访问时,未为子域设置 Django csrf cookie

    到目前为止 我的应用程序运行良好 所有操作都是通过访问其公共 IP 来完成的 现在 它被添加到主站点 名称为 app mainsite com 这样就可以访问了 我可以登录等等一切 但我的应用程序有点特别 它的某个功能允许用户在任何第三方网
  • Android中如何获取经度和纬度

    我想找到我当前位置的经度和纬度 但我一直得不到NULL double lat loc getLatitude Cause the result is null so can t know longitude and latitude dou
  • 按给定的时间增量查找数据帧列中的时间戳

    我有一个包含时间戳列的数据框 我的目标是找到每行的第一个时间戳 该时间戳大于该行的时间戳给定的偏移量 例如 0 01 秒 我尝试使用这里给出的答案 https stackoverflow com questions 32237862 fin
  • 如何使用 Angular Elements 创建具有可自定义模板的 Web 组件?

    我想使用 Angular Elements 创建一个 Web 组件库 该库具有默认模板 但允许开发人员覆盖输出 例如 考虑一个搜索结果组件 我可能有一个如下所示的默认模板 h1 Search results for query h1 但开发
  • React Native 中组件之间的导航

    我需要在 React Native 的两个视图之间导航 但问题是我的组件 其中导航按钮位于其他组件上 我使用反应导航 我来给你展示 我在这里有我的组件 MainPage class MainPage extends Component re
  • 查找 NumPy 数组中到最近零的距离

    假设我有一个 NumPy 数组 x np array 0 1 2 0 4 5 6 7 0 0 在每个索引处 我想找到到最接近的零值的距离 如果位置本身为零 则返回零作为距离 之后 我们只对到当前位置右侧最接近的零的距离感兴趣 超级天真的方法
  • 选择选项“selected”属性

    我这里脑子一片空白 基本上我所做的是创建一个迷你文章管理器 每篇文章都可以分配到在选择下拉列表中定义的以下类别之一 Design 发展 Other 当我去编辑一篇文章时 我从数据库中检索了数据并填充了输入和文本区域 我现在想做的是应用sel
  • AWS 签名的 URL 太长,无法缩短

    我正在使用 AWS 创建一个签名 URL 以便我可以安全地将此 URL 传递给另一个 API 以供临时使用 签名的 URL 指向 S3 资源 问题是其他 API 不接受这么长的链接 因此我正在尝试缩短它 我尝试使用类似的缩短器goo gl
  • Android Studio 音乐播放器无法从 SD 卡读取,只能读取内存

    如果这被证明是一个愚蠢的问题 我深表歉意 这可能是一个快速解决方案 但我就是无法弄清楚 我正在 android studio 中构建一个音乐播放器 尽管我确实实现了 getExternalStorageDirectory 并在清单文件中添加
  • Shutterfly 订单 API 。

    我找到了这个网站 http www shutterfly com documentation api OrderImage sfly http www shutterfly com documentation api OrderImage
  • 在 Hedera 区块链中创建智能合约时出现错误“Transaction Oversize”

    我的 bin 文件大小只有 18kb 我还得到了使用 IPFS 的解决方案 但不知道如何使用它 如果有任何使用 IPFS 的参考 请分享给我 错误 PrecheckStatusError 交易 电子邮件受保护 cdn cgi l email
  • IPython Notebook 中的“斑马表”?

    我正在 IPython 中使用用于交互式分析的出色 Notebook 和 Pandas 构建一些交互式工作流程 我显示的一些表格通过一些格式化会更容易阅读 我真的很喜欢像 斑马桌 这样的东西 每隔一行都有阴影 我在这里读 http dev
  • 实体框架代码首先将同一类型的多个复杂类型映射到一个表

    如果您有以下域模型 public class Test public string Description get set public TestB A get set public TestB B get set public TestB
  • BouncyCastle 安装问题

    我正在尝试将 BouncyCastle 添加为 Windows XP Pro 上的安全提供程序 以便我可以根据说明使用它向 Android 应用程序添加一些证书here http blog crazybob org 2010 02 andr
  • Nvcc 的版本与 CUDA 不同

    我安装了 cuda 7 但是当我点击 nvcc version 时 它打印出 6 5 我想在 GTX 960 卡上安装 Theano 库 但它需要 nvcc 7 0 我尝试重新安装cuda 但它没有更新nvcc 当我运行 apt get i
  • Spring Rest api 过滤响应中的字段

    我正在使用 spring Rest api 4 x 我们有一个需求 根据请求参数过滤响应中的字段 我的用户对象 private class UserResource private String userLastName private S
  • 如何以编程方式从 Google 云端硬盘中的“与我共享”中删除文件

    在完整驱动器范围内执行以下命令 var request service Files Delete fileId 结果是 权限不足错误 尝试从 Google 云端硬盘 与我共享 文件夹中删除文件时 当登录的用户实际上无权删除不属于他们的文件时
  • Android 退出全屏后嵌入式 IFRAME 视频继续在后台播放

    我已经搜索了很多解决这个问题的方法 但显然我找不到 嗯 顾名思义 我有一个简单的 Android 应用程序 它有一个 Webview public class MainActivity extends Activity protected