就像我们使用hitTestResult.getType() == WebView.HitTestResult.SRC_ANCHOR_TYPE检测锚文本一样,我如何检测Facebook上播放的视频?我想知道视频文件的hitTestResult.GetExtra(),然后搜索其有效扩展名(.mp4),然后下载该文件。
hitTestResult.getType() == WebView.HitTestResult.SRC_ANCHOR_TYPE
hitTestResult.GetExtra()
dldeef671#
因此,据我所知,根据你所描述的,你加载你的FB页面在一个WebView,并希望下载.mp4视频,如果有一个。
WebView
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); webView = (WebView)findViewById(R.id.webView); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setPluginState(WebSettings.PluginState.ON); webView.getSettings().setBuiltInZoomControls(true); webView.getSettings().setDisplayZoomControls(true); webView.getSettings().setUseWideViewPort(true); webView.getSettings().setLoadWithOverviewMode(true); webView.addJavascriptInterface(this, "FBDownloader"); webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { if (swipeLayout.isRefreshing()) { swipeLayout.setRefreshing(false); } webView.loadUrl("javascript:(function() { " + "var el = document.querySelectorAll('div[data-sigil]');" + "for(var i=0;i<el.length; i++)" + "{" + "var sigil = el[i].dataset.sigil;" + "if(sigil.indexOf('inlineVideo') > -1){" + "delete el[i].dataset.sigil;" + "var jsonData = JSON.parse(el[i].dataset.store);" + "el[i].setAttribute('onClick', 'FBDownloader.processVideo(\"'+jsonData['src']+'\");');" + "}" + "}" + "})()"); } @Override public void onLoadResource(WebView view, String url) { webView.loadUrl("javascript:(function prepareVideo() { " + "var el = document.querySelectorAll('div[data-sigil]');" + "for(var i=0;i<el.length; i++)" + "{" + "var sigil = el[i].dataset.sigil;" + "if(sigil.indexOf('inlineVideo') > -1){" + "delete el[i].dataset.sigil;" + "console.log(i);" + "var jsonData = JSON.parse(el[i].dataset.store);" + "el[i].setAttribute('onClick', 'FBDownloader.processVideo(\"'+jsonData['src']+'\",\"'+jsonData['videoID']+'\");');" + "}" + "}" + "})()"); webView.loadUrl("javascript:( window.onload=prepareVideo;" + ")()"); } }); CookieSyncManager.createInstance(this); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); CookieSyncManager.getInstance().startSync(); webView.loadUrl(target_url); } @JavascriptInterface public void processVideo(final String vidData, final String vidID) { try { String mBaseFolderPath = android.os.Environment .getExternalStorageDirectory() + File.separator + "FacebookVideos" + File.separator; if (!new File(mBaseFolderPath).exists()) { new File(mBaseFolderPath).mkdir(); } String mFilePath = "file://" + mBaseFolderPath + "/" + vidID + ".mp4"; Uri downloadUri = Uri.parse(vidData); DownloadManager.Request req = new DownloadManager.Request(downloadUri); req.setDestinationUri(Uri.parse(mFilePath)); req.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); DownloadManager dm = (DownloadManager) getSystemService(getApplicationContext().DOWNLOAD_SERVICE); dm.enqueue(req); Toast.makeText(this, "Download Started", Toast.LENGTH_LONG).show(); } catch (Exception e) { Toast.makeText(this, "Download Failed: " + e.toString(), Toast.LENGTH_LONG).show(); } }
1条答案
按热度按时间dldeef671#
因此,据我所知,根据你所描述的,你加载你的FB页面在一个
WebView
,并希望下载.mp4视频,如果有一个。