是否可以检查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是否正在播放视频并获取视频网址?
答案 0 :(得分:0)
您可以使用JavaScript检测视频是否正在播放。
在.js
目录中创建一个assets
文件,并声明JavaScript函数和jQuery,如下所示:
$("video").on("play", function() {
//You can call JavaScriptInterface here.
});
将此.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
完成!如果您使用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()
});
希望它能对您有所帮助。