блокировать рекламу в android веб-просмотре - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть android проект, который я должен загрузить URL-адрес в веб-просмотра, но без рекламы. На самом деле я должен заблокировать эту рекламу. Я пробую это решение, но оно не работает. Пожалуйста, помогите мне.

stackoverflow

Я создал пользовательский WebViewClient, например:

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);
 }}

И создал класс AdBlocker, например:

  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();}}
...