欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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