WebView 监听 H5 下载

需求

在 APP 首页轮播图点击跳转到 WebView ,在 webView 中点击链接下载新版 APP

问题

如果直接传递 APP 在应用宝上的网址,在 WebView 中加载完之后点击网页上的按钮没有反应,不跳浏览器也不提示下载应用宝或者跳转应用宝。原因是:为 WebView 重新设置了 WebViewClient 之后会导致 WebView 自身支持网页唤起的功能失效。

针对下载需要设置一个 setDownloadListener 来监听获取到的链接是否是下载链接!但测试发现监听只能获取到 APP 的下载动作,无法监听到应用宝的监听动作,需要后续再查找原因吧。

由于在应用中需要设置 WebView 加载页面的标题,所以必须设置 WebViewClient。为避免 WebView 自身唤起浏览器的功能失效,改用 WebChromeClient 实现头部标题设置,不再设置 WebViewClient

方法

方法1

捕获链接跳转应用市场

mWebView.setWebViewClient(new WebViewClient() {//监听webview的链接点击
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Log.e("Url", "Url ===" + url);
        if ("https://a.app.qq.com/o/simple.jsp?pkgname=yourpkgname".equals(url)){//此处记得替换对应包名
            try {
                Uri uri = Uri.parse("market://details?id=yourpkgname");
                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
            } catch (Exception e) {
                ToastUtils.showToast("检测不到应用市场");
                e.printStackTrace();
            }
        }else {
            view.loadUrl(url);
        }
        return true;
    }
}

方法2

设置下载监听,跳转浏览器下载

mWebView.setDownloadListener(new DownloadListener() {
    @Override
    public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        Uri uri = Uri.parse(url);
        intent.addCategory(Intent.CATEGORY_BROWSABLE);
        intent.setData(uri);
        startActivity(intent);
    }
});

方法3

不设置WebViewClient,使用webview自带的功能唤起浏览器,将下载工作交给浏览器完成。

mWebView.setWebChromeClient(new WebChromeClient(){
    @Override
    public void onReceivedTitle(WebView view, String title) {
        super.onReceivedTitle(view, title);
        titleTv.setText(view.getTitle());
    }
});

至此,问题算是解决啦。这里先记录下解决的方法,感觉关于webview的认识有了更进一步的了解,不过还有一些需要补充了解的知识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值