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

Android中WebView.getHitTestResult().getExtra()丢失mailto:前缀问题及检测方法

问题解答

1. 为何result.getExtra()不返回mailto:/tel:前缀?

Android系统的WebView.HitTestResult对特殊协议(如mailto、tel)做了封装处理,会自动剥离协议前缀,仅返回核心业务内容(邮箱地址、电话号码)。这是官方设计逻辑,目的是让开发者直接拿到可直接使用的目标值,省去手动截取前缀的步骤。

2. 如何准确判断长按链接类型?

通过HitTestResult.getType()返回的类型常量即可精准判断,无需通过内容特征(如@符号)推测:

  • 邮件链接对应常量:WebView.HitTestResult.EMAIL_TYPE
  • 电话链接对应常量:WebView.HitTestResult.PHONE_TYPE
  • 普通HTTP/HTTPS链接对应常量:WebView.HitTestResult.SRC_ANCHOR_TYPE

修改后的示例代码:

webView.setOnLongClickListener(v -> {
    WebView.HitTestResult result = webView.getHitTestResult();
    int hitType = result.getType();
    
    switch (hitType) {
        case WebView.HitTestResult.EMAIL_TYPE:
            String fullMailUrl = "mailto:" + result.getExtra();
            Log.d("find_mailto", fullMailUrl);
            break;
        case WebView.HitTestResult.PHONE_TYPE:
            String fullTelUrl = "tel:" + result.getExtra();
            Log.d("find_tel", fullTelUrl);
            break;
        case WebView.HitTestResult.SRC_ANCHOR_TYPE:
            Log.d("find_url", result.getExtra());
            break;
        // 可扩展处理其他类型:如图片、纯文本等
        default:
            break;
    }
    return true;
});

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 12:30:10