检查 WebView 是不是正在播放视频

Posted

技术标签:

【中文标题】检查 WebView 是不是正在播放视频【英文标题】:Check if a WebView is playing a video检查 WebView 是否正在播放视频 【发布时间】:2018-12-18 06:09:48 【问题描述】:

是否可以检查 WebView 目前是否正在播放视频,如果是,则获取该视频的 http://... .mp4/ URL 以进行下载?

我已经尝试过这段代码:

public void onLoadResource(WebView view, final String url)
            super.onLoadResource(view, url);
            if(url.endsWith(".mp4") & !url.contains(".jpg") & !url.contains(".png"))

                AlertDialog.Builder video_downloaden = new AlertDialog.Builder(SearchActivity.this);
                video_downloaden.setTitle("Video downloaden?");
                video_downloaden.setMessage("Download Video?");
                video_downloaden.setPositiveButton("YES", new DialogInterface.OnClickListener() 
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) 

                        DownloadManager.Request request_video = new DownloadManager.Request(Uri.parse(url));
                        request_video.allowScanningByMediaScanner();

                        request_video.setVisibleInDownloadsUi(false);

                        DownloadManager downloadManager2 = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);

                        request_video.setDestinationInExternalFilesDir(getApplicationContext(), DIRECTORY_DOWNLOADS, File.separator + ".Videos" + File.separator + "video" + video_number);

                        downloadManager2.enqueue(request_video);
                        Toast.makeText(SearchActivity.this,"Download started",Toast.LENGTH_LONG).show();

                    
                );
                video_downloaden.setNegativeButton("NO", new DialogInterface.OnClickListener() 
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) 
                        dialogInterface.cancel();
                    
                );

                video_downloaden.show();

            
        

但是对于onLoadResource(),AlertDialog 一直显示,并且每次都无法下载... 所以我的问题是,是否还有其他机会检查 WebView 是否正在播放视频并获取视频 url?

【问题讨论】:

【参考方案1】:

您可以使用 javascript 检测视频是否正在播放。

    assets 目录下创建一个.js 文件,并像这样声明一个JavaScript 函数和jQuery:

    $("video").on("play", function() 
     //You can call JavaScriptInterface here.
    );
    

    在包含视频的网页中插入此 .js 文件。我在调用onPageFinished 时插入了.js 文件。

    view?.context?.assets?.let 
        val inputStream: InputStream = it.open(scriptFile)
        val buffer = ByteArray(inputStream.available())
        inputStream.read(buffer)
        inputStream.close()
    
        val encoded = Base64.encodeToString(buffer, Base64.NO_WRAP)
    
        view.loadUrl("javascript:(function() " +
                "var parent = document.getElementsByTagName('head').item(0);" +
                "var script = document.createElement('script');" +
                "script.type = 'text/javascript';" +
                "script.innerhtml = window.atob('$encoded');" +
                "parent.appendChild(script)" +
                ")()")
    

    如果您不熟悉 Kotlin,请查看此参考:android Web-View : Inject local Javascript file to Remote Webpage

    完成!如果你使用JavaScriptInterface,你可以做任何你想做的事,像这样。

    class WebScriptInterface(val button: View) 
    
     @JavascriptInterface
     fun hideFloatingButton() 
       if (button.visibility == View.VISIBLE) 
        button.visibility = View.GONE
       
     
    
    

设置webView 使用JavaScriptInterface

webView.addJavascriptInterface
 (WebScriptInterface(binding.floatBrowserCollect), "App")

然后调用。

 $("video").on("play", function() 
    App.hideFloatingButton()
  );

希望对你有帮助。

【讨论】:

感谢您的遮阳篷。但是我仍然有一些问题:我不能使用@JavaScriptInterface 因为:Android Studio 说:这里不允许注释。而且我不知道如何使用 JavaScript(因为这是我第一次使用它)当我复制这段代码时,我只会得到错误。 (例如view?.context?.assets?.let val 是什么意思?对不起我的愚蠢问题,但我是编程的初学者...... @NilsBe 看到这个。 How to add JavaScriptInterface 和val 用于Kotlin。在我的答案中检查数字 2。我在Java 版本中链接了相同代码的网址。 非常感谢,不可以,但是有没有可能获取当前正在播放的视频的直接url? @NilsBe 我听说有一种方法可以使用JavaScript 获取视频网址,但我从未尝试过。这个怎么样?有一个标志(如布尔类型变量,表示是否正在播放视频)并在onLoadResources 方法中,仅获取视频网址此标志为假(视频未播放)。 您好@mel.j,我已遵循您的解决方案,但它不起作用。你能给我完整的样品吗?提前致谢!

以上是关于检查 WebView 是不是正在播放视频的主要内容,如果未能解决你的问题,请参考以下文章

检查视频是不是正在播放而不重新启动的脚本

检查是不是正在播放 HTML5 视频元素

WebView网页视频统一全屏播放及横竖屏切换

视频未在 Webview android (Google TV) 内播放

在 webview 中自动播放视频

WebView - Youtube 视频在后台播放并最小化