本文介绍了如何使用HitTestResult在Android WebView中检测视频?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
就像我们使用hitTestResult.getType() == WebView.HitTestResult.SRC_ANCHOR_TYPE
检测锚文本一样,如何检测在Facebook上播放的视频?
Like we detect anchor text using hitTestResult.getType() == WebView.HitTestResult.SRC_ANCHOR_TYPE
, How can I detect a video playing on Facebook?
我想知道视频文件的hitTestResult.GetExtra()
,然后搜索其有效扩展名(.mp4),然后下载该文件.
I want to know the hitTestResult.GetExtra()
for a video file and then search for its valid extension (.mp4) and then download the file.
推荐答案
据我了解,根据您的描述,您将FB页面加载到WebView
中,如果有的话,希望下载.mp4视频.这段代码将为您完成
So as I understand based on what you described you load your FB page in a WebView
and want to download .mp4 videos if there is one. This code will do it for you
@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();
}
}
这篇关于如何使用HitTestResult在Android WebView中检测视频?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!