Android WebView加载H5页面,H5页面使用URL Scheme唤起APP失败

8 篇文章 0 订阅

1. 前言

最近遇到了一个问题,H5页面使用URL Scheme唤起第三方APP,在手机浏览器已经测试通过了,但是在APP里面,却失败了。

本篇文章不介绍如何使用URL Scheme唤起APP,如果想知道的朋友,可以查看下列文章:

回归正题,我们以“爱奇艺在线视频网站(https://m.iqiyi.com)”为例,使用WebView来加载,显示如下:

点击“打开看看”,正常情况是打开爱奇艺APP(如果手机没安装,会弹出下载APP安装包的提示窗口),但实际上却报错了,报错信息的大概意思是:未知的URL Scheme,如下图所示:

2. 解决方案

经过查找相关资料,并调试相关代码,定位到了问题所在。

mWebView.setWebViewClient(new WebViewClient());

原来是因为WebView设置WebViewClient,导致所有URL都默认使用WebView进行加载了,但是像“iqiyi://mobile/register_business/qyclient?pluginParams=%25”(这是唤起爱奇艺APP的URL的一部分)这种自定义URL,WebView是无法加载成功的。

如果已经了解过URL Scheme的朋友,应该是知道Android可以这样来唤起第三方APP。

// url是符合第三方APP所规定的Scheme的URL,可以用来唤起第三方APP
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));

所以,我们可以通过拦截URL的方式来解决这个问题,具体代码如下:

mWebView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // WebView可以加载Http、Https和file这三种URL,所以除了这三种URL外,其他都要另外处理
        if (!url.startsWith("http") && !url.startsWith("file")) {
            try {
                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
            } catch (Exception e) {
                // 如果找不到合适的APP来加载URL,则会抛出异常
                e.printStackTrace();
            }
            return true;
        }
        return super.shouldOverrideUrlLoading(view, url);
    }
});

完整的demo可以查看 AndroidWebView

 

如果想进一步交流和学习的同学,可以加一下QQ群哦!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值