使用shouldInterceptRequest

时间:2017-02-22 09:20:03

标签: android webview android-webview

虽然已经多次询问过这个问题,但与我的问题真正相关的唯一问题是这个(Can I use shouldInterceptRequest to block a particular call in Android?),但它在3年多前被问到并且最终没有得到答复。

我尝试阻止的请求是POST请求,因此shouldOverrideUrlLoading方法无法拦截它。

单击按钮后,webview将加载包含以下字符串的URL:" androidBundleId _ ********"。

我需要阻止此请求并将用户重定向到Play商店(但我知道如何执行此操作!)

问题是shouldInterceptRequest方法的返回类型是 WebResourceResponse (哦,我希望它是boolean!)。因此,我必须至少返回一个空白的WebResourceResponse。

我不想,因为WebResourceResponse中的所有内容都会在我的应用中加载。我只想让webview拦截请求并阻止它

除Play商店意图外,应用应继续显示相同的网页,不应加载任何数据。

我只发布代码的相关部分。

@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
    if(url.contains("androidBundleId_")){
        String bundleID = url.substring(url.indexOf("androidBundleId_")+"androidBundleId".length()+1, url.length());
        try {
            getContext().startActivity(new Intent
                    (Intent.ACTION_VIEW, Uri.parse("market://details?id=" + bundleID)));
        } catch (android.content.ActivityNotFoundException anfe) {
            getContext().startActivity(new Intent
                    (Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + bundleID)));
        }

        // I'D LIKE TO RETURN NOTHING HERE !!!
    }
    return super.shouldInterceptRequest(view, url);
}

我知道这个签名已被弃用,但我正在使用minSdk 16构建应用程序,因此我只能使用这个,而不是接受Request作为第二个参数。

你有解决方法吗?请注意,我无法更改包含该按钮的网页。

1 个答案:

答案 0 :(得分:0)

由于没有机会做我一直要求的事情,我们改变了整个应用程序逻辑并最终切换到WebChromeClient。它自动处理链接/意图