解决Android WebView拦截url,视频播放加载失败的问题
程序员文章站
2023-01-28 11:12:36
需求:android调用webview加载网页的时候,拦截某一个链接不执行此链接,执行指定跳转到其他activity页面。webview的setwebviewclient方法中提供了几个api: //...
需求:android调用webview加载网页的时候,拦截某一个链接不执行此链接,执行指定跳转到其他activity页面。
webview的setwebviewclient方法中提供了几个api:
// 此回调是拦截点击要跳转的url链接,并对请求的url链接做修改(添加删除字段) public webresourceresponse shouldinterceptrequest(webview view, string url) // 在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。这个函数我们可以做很多操作,比如我们读取到某些特殊的url,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。 public boolean shouldoverrideurlloading(webview view, string url)
所以我的需求就是在shouldoverrideurlloading方法中做处理
webview.setwebviewclient(new webviewclient() { @override // 在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。这个函数我们可以做很多操作,比如我们读取到某些特殊的url,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。 public boolean shouldoverrideurlloading(webview view, string url) { // 判断url链接中是否含有某个字段,如果有就执行指定的跳转(不执行跳转url链接),如果没有就加载url链接 if (url.contains("/mproduct-")) { intent i = new intent(mainactivity.this, mainactivity.class); startactivity(i); return true; } else { return false; } } });
webview的一些其他设置
//点击返回键,返回上一个页面,而不是退出程序 public boolean onkeydown(int keycode, keyevent event) { if (keycode == keyevent.keycode_back && webview.cangoback()) { webview.goback();// 返回前一个页面 return true; } return super.onkeydown(keycode, event); }
@override protected void ondestroy() { super.ondestroy(); //清楚webview缓存 webview.clearcache(true); }
private void initview() { webview = (webview) findviewbyid(r.id.webview); websettings settings = webview.getsettings(); settings.setjavascriptenabled(true); settings.setbuiltinzoomcontrols(true);// 设置支持缩放 settings.setsupportzoom(false);// 不支持缩放 settings.setusewideviewport(false);// 将图片调整到适合webview大小 settings.setloadwithoverviewmode(true);// 缩放至屏幕的大小 settings.setcachemode(websettings.load_cache_else_network);//支持缓存 }
websettings 的常用方法介绍:
setjavascriptenabled(true); //支持js setpluginsenabled(true); //支持插件 setusewideviewport(false); //将图片调整到适合webview的大小 setsupportzoom(true); //支持缩放 setlayoutalgorithm(layoutalgorithm.single_column); //支持内容重新布局 supportmultiplewindows(); //多窗口 setcachemode(websettings.load_cache_else_network); //关闭webview中缓存 setallowfileaccess(true); //设置可以访问文件 setneedinitialfocus(true); //当webview调用requestfocus时为webview设置节点 webview websettings.setbuiltinzoomcontrols(true); //设置支持缩放 setjavascriptcanopenwindowsautomatically(true); //支持通过js打开新窗口 setloadwithoverviewmode(true); // 缩放至屏幕的大小 setloadsimagesautomatically(true); //支持自动加载图片
webviewclient 的方法全解:
doupdatevisitedhistory(webview view, string url, boolean isreload) //(更新历史记录) onformresubmission(webview view, message dontresend, message resend) //(应用程序重新请求网页数据) onloadresource(webview view, string url) // 在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。 onpagestarted(webview view, string url, bitmap favicon) //这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。 onpagefinished(webview view, string url) //在页面加载结束时调用。同样道理,我们知道一个页面载入完成,于是我们可以关闭loading 条,切换程序动作。 onreceivederror(webview view, int errorcode, string description, string failingurl)// (报告错误信息) onreceivedhttpauthrequest(webview view, httpauthhandler handler, string host,string realm)//(获取返回信息授权请求) onreceivedsslerror(webview view, sslerrorhandler handler, sslerror error) //重写此方法可以让webview处理https请求。 onscalechanged(webview view, float oldscale, float newscale) // (webview发生改变时调用) onunhandledkeyevent(webview view, keyevent event) //(key事件未被加载时调用) shouldoverridekeyevent(webview view, keyevent event)//重写此方法才能够处理在浏览器中的按键事件。 shouldoverrideurlloading(webview view, string url) //在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。这个函数我们可以做很多操作,比如我们读取到某些特殊的url,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。
关于webview加载的h5,h5中视频播放加载失败的问题解决:
1、androidmanifest.xml中 在webview所在的activity配置文件加入下面属性
android:hardwareaccelerated="true"
2、添加 websettings.setpluginstate(websettings.pluginstate.on);
没加的话,视频会加载失败
3、5.0 以上的手机要加这个判断
if (build.version.sdk_int >= build.version_codes.lollipop) { websettings.setmixedcontentmode(websettings.mixed_content_always_allow); }
以上这篇解决android webview拦截url,视频播放加载失败的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。