检查WebView是否正在播放视频

时间:2018-07-10 11:53:36

标签: android performance video webview download

是否可以检查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是否正在播放视频并获取视频网址?

1 个答案:

答案 0 :(得分:0)

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

  1. .js目录中创建一个assets文件,并声明JavaScript函数和jQuery,如下所示:

    $("video").on("play", function() {
     //You can call JavaScriptInterface here.
    });
    
  2. 将此.js文件插入包含视频的网页中。我在调用.js时插入了onPageFinished文件。

    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

  3. 完成!如果您使用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()
  });

希望它能对您有所帮助。