1

I have an android project that I should load an url in web view but with no ads.actually i should block this ads. i try this solution but it doesn't work . please help me .

stackoverflow

I made a custom WebViewClient like:

public class MyWebViewClient extends WebViewClient {

@Override
public void onPageFinished(WebView view, String url) { }

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (url.endsWith(".mp4")) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.parse(url), "video/*");
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        view.getContext().startActivity(intent);
        return true;
    } else if (url.startsWith("tel:") || url.startsWith("sms:") || url.startsWith("smsto:")
            || url.startsWith("mms:") || url.startsWith("mmsto:")) {
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        view.getContext().startActivity(intent);
        return true;
    } else {
        return super.shouldOverrideUrlLoading(view, url);
    }
}

private Map<String, Boolean> loadedUrls = new HashMap<>();

@SuppressWarnings("deprecation")
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
    boolean ad;
    if (!loadedUrls.containsKey(url)) {
        ad = AdBlocker.isAd(url);
        loadedUrls.put(url, ad);
    } else {
        ad = loadedUrls.get(url);
    }
    return ad ? AdBlocker.createEmptyResource() :
            super.shouldInterceptRequest(view, url);
 }}

And created an AdBlocker class like:

  public class AdBlocker {
  private static final Set<String> AD_HOSTS = new HashSet<>();

public static boolean isAd(String url) {
try {
    return isAdHost(getHost(url));
} catch (MalformedURLException e) {
    Log.e("Devangi..", e.toString());
    return false;
}}

private static boolean isAdHost(String host) {
if (TextUtils.isEmpty(host)) {
    return false;
}
int index = host.indexOf(".");
return index >= 0 && (AD_HOSTS.contains(host) ||
        index + 1 < host.length() && isAdHost(host.substring(index + 1)));}

public static WebResourceResponse createEmptyResource() {
return new WebResourceResponse("text/plain", "utf-8", new ByteArrayInputStream("".getBytes()));}

public static String getHost(String url) throws MalformedURLException {
return new URL(url).getHost();}}
zahra7329
  • 53
  • 5

0 Answers0