gpt4 book ai didi

android - 从 WebView 检测并获取播放视频 url

转载 作者:行者123 更新时间:2023-12-04 15:44:25 28 4
gpt4 key购买 nike

我正在使用 WebView在申请加载网址。我想要的功能是检测视频并在 web View 中播放任何视频时获取 url。

我已经用过WebViewClientshouldOverrideUrlLoading(WebView view, String url)
网页浏览代码

    webview = findViewById(R.id.webview);
WebSettings webSettings = webview.getSettings();
webSettings.setJavaScriptEnabled(true);
webview.getSettings().setPluginState(WebSettings.PluginState.ON);
webview.getSettings().setBuiltInZoomControls(true);
webview.getSettings().setDisplayZoomControls(true);
webview.getSettings().setDomStorageEnabled(true);
webview.getSettings().setUseWideViewPort(true);
webview.getSettings().setLoadWithOverviewMode(true);
webview.setWebViewClient(new MyWebViewClient());
webview.loadUrl("https://www.google.com/");

WebViewClient 代码
  private class MyWebViewClient extends WebViewClient {

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}

@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.contains("youtube") && !url.contains("-youtube")) {
Toast.makeText(context, "This is youtube url", Toast.LENGTH_SHORT).show();
return true;
} else {
String newUrl = checkUrl(url);
if (Patterns.WEB_URL.matcher(newUrl).matches()) {
Toast.makeText(context, "This is url : " + newUrl, Toast.LENGTH_SHORT).show();
view.loadUrl(newUrl);
} else {
Toast.makeText(context, "This is url : " + url, Toast.LENGTH_SHORT).show();
view.loadUrl(String.format("http://google.com/search?tbm=vid&q=%s -youtube -site:youtube.com", new Object[]{url}));
}
return false;
}
}
}

public String checkUrl(String str) {
if (str == null) {
return str;
}
StringBuilder stringBuilder;
if (Build.VERSION.SDK_INT < 28) {
if (!str.startsWith("http")) {
stringBuilder = new StringBuilder();
stringBuilder.append("http://");
stringBuilder.append(str);
str = stringBuilder.toString();
}
return str;

} else if (str.startsWith("https")) {
return str;
} else {
if (str.startsWith("http")) {
return str.replaceFirst("http", "https");
}
stringBuilder = new StringBuilder();
stringBuilder.append("https://");
stringBuilder.append(str);
return stringBuilder.toString();
}
}

注意 - 我可以获取当前加载的 url 的链接,但无法在 webview 的当前 url 中获取播放视频的链接。

最佳答案

我知道现在回答这个问题为时已晚,但这适用于遇到同样问题的任何人。
首先不要使用“shouldOverrideUrlLoading(WebView view, String url)”
而是使用“shouldInterceptRequest(WebView view, WebResourceRequest request)”
所以你的代码应该是

private class MyWebViewClient extends WebViewClient {

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}

@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}

@Override
public shouldInterceptRequest(WebView view, WebResourceRequest request){
super.shouldInterceptRequest(view,request)

//Get the request and assign it to a string

String requestUrl = request.getUrl.toString;

//Get the mime-type from the string

String extension = MimeTypeMap.getFileExtensionFromUrl(requestUrl);
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);

//make sure the mime-type isn't null
if(mimeType != null){

// check if any of the requestUrls contain the url of a video file

if(mimeType.startsWith("video/") && requestUrl.contains("youtube.com")){

Log.e("Video File" , requestUrl);

}
}
}
这应该给出播放视频的确切 url,如果视频是一个流,那么它会给你多个 url。

关于android - 从 WebView 检测并获取播放视频 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56489708/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com