Android WebView显示广告
参考文档:
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显示广告相关推荐
- android webView显示PDF文件
最近公司开发的应用需要使用webview显示PDF格式的合同文件,因为后台返回的是一个PDF文件的的下载路径,用浏览器是可以直接打开查看的.起初我以为webview应该也能直接解析查看,毕竟强大如Go ...
- android自带的webview有广告,android webview 拦截广告
要想对Webview实现一些高级操作,需要使用WebViewClient,下面是关于Webview的几个常用回调函数: 1.public boolean shouldOverrideUrlLoadin ...
- android WebView 显示网页
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- Android中Webview显示全屏拉伸图片
需要在一个视频view上叠加一个webview显示一些第三方的内容,例如视频.图片.h5页面等.显示图片时出现了边框和滚动条等不在预期的内容.由于对web相关的技术不甚了解,查询一番后完美解决.图片自 ...
- android webview 太大,Android应用开发之Android WebView加载图片显示过大的处理教程(代码教程)...
本文将带你了解Android应用开发Android WebView加载图片显示过大的处理教程(代码教程),希望本文对大家学Android有所帮助. Webview加载图片时,经常会遇到图片显示不符合 ...
- Android WebView 视频播放,全屏按钮不显示或灰显解决方案
Android WebView 视频播放,全屏按钮不显示或灰显解决方案 背景 问题定位 背景 在Android开发中,遇到了如下问题:Activity内嵌WebView,加载有视频的页面时,视频无法全 ...
- android逆向知乎,Android逆向之路---为什么从后台切换回app又显示广告了
问题 最近发现自己的android机在开网易新闻,知乎等app的时候,明明自己没有杀进程,从后台返回回来的时候还是会再次显示广告,而且又正巧在知乎上看到了有人在提问,于是逆向分析.就用知乎作为例子吧. ...
- Android webview广告过滤的实现
WebViewClient的几个回调函数(本文章转自 某某某 ) 要想对Webview实现一些高级操作,首先要学习WebViewClient的用法,这是Webview几个常用回调函数 1.publ ...
- android webview iframe 不显示,带有iframe的视频不会显示在Android Webview上
我正在从其他网站上显示WebView的Android项目(API级别8)上工作,我无法更改这些网站的代码.我在WebView中的某些设备上无法强制GPU渲染(在设置 - >开发人员选项中)中遇到 ...
最新文章
- 客户端验证不能代表服务器端验证
- python ftp服务器限速_用 Python 快速实现 HTTP 和 FTP 服务器
- MAT之PSO:利用PSO实现对一元函数y = sin(10*pi*x) ./ x进行求解优化,找到最优个体适应度
- ​GPLinker:基于GlobalPointer的实体关系联合抽取
- python之路-双下方法
- Educational Codeforces Round 88 D. Yet Another Yet Another Task(巧枚举)
- TypeError: rose() takes 0 positional arguments but 1 was given--python报错
- python界面编程pdf_Python Qt GUI快速编程——PyQt编程指南 中文pdf完整版[99MB]
- noise code
- FluorineFx:视频录制及回放(Flash/AS3环境)
- Python操作ElasticSearch条件查询
- C++11 pair的使用
- Android开发之BUG专讲:入门篇(二)
- sniffer Pro4.7.5最完整安装教程
- 配置Linaro toolchain交叉编译工具
- [科普] 狭义相对论
- c语言指针选择题库及答案,C语言指针练习习题及答案.doc
- 算法小程序:倒水问题
- windows下tomcat7日志配置
- python打包和添加数据文件_python库打包分发setup.py编写指南
热门文章
- 虚拟机使用vm8模式上网
- matlab table中的文字转string_MATLAB绘图中对各种属性的控制方法(二)
- Windows Server 2008 R2 英文版 修改桌面主题(Win7主题)
- 网络诊断dns服务器未响应,网络诊断提示DNS服务器未响应解决方法
- Maven知识点总结(初学者)
- buck电路matlab,buck电路simulink仿真
- 艾永亮:从产品功能需求到打造超级产品过程中,企业经历了什么?
- 绿天鹅——气候变化环境下的中央银行与金融稳定性
- 【商业终端仿真解决方案】上海道宁为您带来Georgia介绍、试用、教程
- 【无人机】采用最基本的自由空间路损模型并且不考虑小尺度衰落(多径多普勒)固定翼无人机轨迹规划(Matlab代码实现)