参考文档:

1.http://wangbaiyuan.cn/realization-of-android-webview-advertising-filtering.html#prettyPhoto   Android webview广告过滤的实现

2.http://www.jianshu.com/p/d793c8d4ff81       Android快速去掉WebView上的烦人广告

项目中用到了webview加载前端界面,也就是Hybrid  App。

但是在webview显示的界面,出现了广告,在界面上边,或者下边,严重影响用户体验,所以需要去掉广告。

参考了文档1的实现方案,文档1是通过判断广告的url进行实现的。

我进行了一些改变,使用到了正则表达式,也是文档1最后的建议。

实现之后,进行了测试,感觉这个方案是可行的

public WebResourceResponse shouldInterceptRequest(WebView view, String url) 方法会回调给你web界面所有的请求,对没一个请求进行判断,过滤,不是合法的url,禁止请求。

下面是我的实现方案:

1.过滤广告的工具类

/*** 过滤广告* <p>* Created by MyPC on 2017/4/18.*/public class ADFilterTool {/*** 正则表达式*/private static String PATTERN = "";static {initPattern();}/*** 初始化pattern*/private static void initPattern() {PATTERN = getPatternStr();}/*** 判断url的域名是否合法* <p>* 域名是否合法:自己项目中使用的域名,为合法域名;其它域名皆为不合法域名,进行屏蔽** @param url* @return*/public static boolean hasNotAd(String url) {if (TextUtils.isEmpty(url)) {return false;}if (TextUtils.isEmpty(PATTERN)) {initPattern();}if (Pattern.matches(PATTERN, url)) {return true;}return false;}/*** 拼接正则表达式** @return*/private static String getPatternStr() {String[] adUrls = App.getInstance().getResources().getStringArray(R.array.legal_domain);if (null != adUrls && adUrls.length > 0) {StringBuffer sb = new StringBuffer("^(https|http)://.*(");for (String a : adUrls) {if (null != a && a.length() > 0) {sb.append(a).append("|");}}return sb.substring(0, sb.length() - 1) + ").*";}return null;}
}

2.这里是合法的url中域名,把它加到attrs.xml文件中

<!--项目中用到的合法域名--><string-array name="legal_domain"><item>91md.cc</item><item>91doctors.cn</item><item>qiniu.com</item><item>cnzz.com</item><item>iok.la</item><item>cnzz.mmstat.com</item><item>clouddn.com</item></string-array>

3.实现WebViewClient类

package com.ylz.cloudhos.doc.ui.widget;import android.webkit.WebResourceResponse;
import android.webkit.WebView;
import android.webkit.WebViewClient;import com.ylz.cloudhos.doc.utils.ADFilterTool;/*** 屏蔽广告,通过重载WebViewClient* <p>* Created by MyPC on 2017/4/18.*/public class NoAdWebViewClient extends WebViewClient {//    private String homeurl;
//    private Context context;
//
//    public NoAdWebViewClient(Context context, String homeurl) {
//        this.context = context;
//        this.homeurl = homeurl;
//    }
//
//    @Override
//    public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
//        if (!url.contains(homeurl)) {
//            if (ADFilterTool.hasNotAd(url)) {
//                return super.shouldInterceptRequest(view, url);
//            } else {
//                return new WebResourceResponse(null, null, null);
//            }
//        } else {
//            return super.shouldInterceptRequest(view, url);
//        }
//    }@Overridepublic WebResourceResponse shouldInterceptRequest(WebView view, String url) {if (ADFilterTool.hasNotAd(url)) {return super.shouldInterceptRequest(view, url);} else {return new WebResourceResponse(null, null, null);}}
}

5.替换掉原先WebViewClient类的实现

//        mWebView.setWebViewClient(new WebViewClient() {
//            @Override
//            public void onPageStarted(WebView view, String url, Bitmap favicon) {
//                super.onPageStarted(view, url, favicon);
//                LoadDialog.show(mContext);
//            }
//
//            @Override
//            public void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);
//                LoadDialog.dismiss(mContext);
//            }
//
//            @Override
//            public boolean shouldOverrideUrlLoading(WebView view, String url) {
//                // 返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
//                view.loadUrl(url);
//                return true;
//            }
//        });mWebView.setWebViewClient(new NoAdWebViewClient() {@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);LoadDialog.show(mContext);}@Overridepublic void onPageFinished(WebView view, String url) {
//                super.onPageFinished(view, url);LoadDialog.dismiss(mContext);}@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {// 返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器view.loadUrl(url);return true;}});

然后就完事了。。。。

Android WebView显示广告相关推荐

  1. android webView显示PDF文件

    最近公司开发的应用需要使用webview显示PDF格式的合同文件,因为后台返回的是一个PDF文件的的下载路径,用浏览器是可以直接打开查看的.起初我以为webview应该也能直接解析查看,毕竟强大如Go ...

  2. android自带的webview有广告,android webview 拦截广告

    要想对Webview实现一些高级操作,需要使用WebViewClient,下面是关于Webview的几个常用回调函数: 1.public boolean shouldOverrideUrlLoadin ...

  3. android WebView 显示网页

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  4. Android中Webview显示全屏拉伸图片

    需要在一个视频view上叠加一个webview显示一些第三方的内容,例如视频.图片.h5页面等.显示图片时出现了边框和滚动条等不在预期的内容.由于对web相关的技术不甚了解,查询一番后完美解决.图片自 ...

  5. android webview 太大,Android应用开发之Android WebView加载图片显示过大的处理教程(代码教程)...

    本文将带你了解Android应用开发Android  WebView加载图片显示过大的处理教程(代码教程),希望本文对大家学Android有所帮助. Webview加载图片时,经常会遇到图片显示不符合 ...

  6. Android WebView 视频播放,全屏按钮不显示或灰显解决方案

    Android WebView 视频播放,全屏按钮不显示或灰显解决方案 背景 问题定位 背景 在Android开发中,遇到了如下问题:Activity内嵌WebView,加载有视频的页面时,视频无法全 ...

  7. android逆向知乎,Android逆向之路---为什么从后台切换回app又显示广告了

    问题 最近发现自己的android机在开网易新闻,知乎等app的时候,明明自己没有杀进程,从后台返回回来的时候还是会再次显示广告,而且又正巧在知乎上看到了有人在提问,于是逆向分析.就用知乎作为例子吧. ...

  8. Android webview广告过滤的实现

    WebViewClient的几个回调函数(本文章转自  某某某  ) 要想对Webview实现一些高级操作,首先要学习WebViewClient的用法,这是Webview几个常用回调函数 1.publ ...

  9. android webview iframe 不显示,带有iframe的视频不会显示在Android Webview上

    我正在从其他网站上显示WebView的Android项目(API级别8)上工作,我无法更改这些网站的代码.我在WebView中的某些设备上无法强制GPU渲染(在设置 - >开发人员选项中)中遇到 ...

最新文章

  1. 客户端验证不能代表服务器端验证
  2. python ftp服务器限速_用 Python 快速实现 HTTP 和 FTP 服务器
  3. MAT之PSO:利用PSO实现对一元函数y = sin(10*pi*x) ./ x进行求解优化,找到最优个体适应度
  4. ​GPLinker:基于GlobalPointer的实体关系联合抽取
  5. python之路-双下方法
  6. Educational Codeforces Round 88 D. Yet Another Yet Another Task(巧枚举)
  7. TypeError: rose() takes 0 positional arguments but 1 was given--python报错
  8. python界面编程pdf_Python Qt GUI快速编程——PyQt编程指南 中文pdf完整版[99MB]
  9. noise code
  10. FluorineFx:视频录制及回放(Flash/AS3环境)
  11. Python操作ElasticSearch条件查询
  12. C++11 pair的使用
  13. Android开发之BUG专讲:入门篇(二)
  14. sniffer Pro4.7.5最完整安装教程
  15. 配置Linaro toolchain交叉编译工具
  16. [科普] 狭义相对论
  17. c语言指针选择题库及答案,C语言指针练习习题及答案.doc
  18. 算法小程序:倒水问题
  19. windows下tomcat7日志配置
  20. python打包和添加数据文件_python库打包分发setup.py编写指南

热门文章

  1. 虚拟机使用vm8模式上网
  2. matlab table中的文字转string_MATLAB绘图中对各种属性的控制方法(二)
  3. Windows Server 2008 R2 英文版 修改桌面主题(Win7主题)
  4. 网络诊断dns服务器未响应,网络诊断提示DNS服务器未响应解决方法
  5. Maven知识点总结(初学者)
  6. buck电路matlab,buck电路simulink仿真
  7. 艾永亮:从产品功能需求到打造超级产品过程中,企业经历了什么?
  8. 绿天鹅——气候变化环境下的中央银行与金融稳定性
  9. 【商业终端仿真解决方案】上海道宁为您带来Georgia介绍、试用、教程
  10. 【无人机】采用最基本的自由空间路损模型并且不考虑小尺度衰落(多径多普勒)固定翼无人机轨迹规划(Matlab代码实现)