当前位置: 移动技术网 > IT编程>移动开发>Android > 解决Android WebView拦截url,视频播放加载失败的问题

解决Android WebView拦截url,视频播放加载失败的问题

2020年05月11日  | 移动技术网IT编程  | 我要评论

玩叛游戏,皇脉战神,祥仔av视觉影院

需求: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,视频播放加载失败的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网