You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android WebView中mailto链接触发ERR_UNKNOWN_URL_SCHEME错误求助

解决Android WebView中mailto链接报错ERR_UNKNOWN_URL_SCHEME的问题

这个问题我之前也碰到过,核心原因是WebView默认只会处理http/https协议的URL,像mailto、tel这类特殊的URL Scheme,它没有内置的处理逻辑,所以点击时就会抛出ERR_UNKNOWN_URL_SCHEME错误。

要解决这个问题,你需要自定义WebViewClient来拦截并处理mailto链接,具体步骤如下:

1. 自定义WebViewClient,拦截mailto链接

重写shouldOverrideUrlLoading方法,判断链接的协议类型,如果是mailto开头,就调用系统邮件应用来处理:

WebView webView = (WebView) findViewById(R.id.webView);

// 自定义WebViewClient处理特殊链接
webView.setWebViewClient(new WebViewClient() {
    // 兼容Android 6.0及以下版本
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        handleSpecialUrl(url);
        return true;
    }

    // 兼容Android 7.0及以上版本
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        String url = request.getUrl().toString();
        handleSpecialUrl(url);
        return true;
    }

    // 统一处理特殊URL的方法
    private void handleSpecialUrl(String url) {
        if (url.startsWith("mailto:")) {
            // 调用系统邮件应用
            Intent intent = new Intent(Intent.ACTION_SENDTO);
            intent.setData(Uri.parse(url));
            // 防止没有邮件应用的情况
            if (intent.resolveActivity(getPackageManager()) != null) {
                startActivity(intent);
            }
        } else {
            // 普通http/https链接正常加载
            webView.loadUrl(url);
        }
    }
});

// 加载本地HTML文件
webView.loadUrl("file:///android_asset/info.html");

2. 补充说明

  • 为什么原来的代码不行?因为默认的WebViewClient没有处理mailto这类非http协议的链接,WebView会尝试直接加载这个URL,自然就报错了。
  • 代码里加了intent.resolveActivity判断,是为了避免用户设备上没有安装邮件应用时崩溃。
  • HTML里的target="_blank"对mailto链接来说没什么影响,因为我们已经拦截并跳转到系统应用了,不需要WebView打开新窗口。

内容的提问来源于stack exchange,提问作者Jaime Alcántara Arnela

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:47:03