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

Android WebView打开Discord邀请链接报错,寻求改用浏览器打开方案

解决方案:用系统浏览器打开Discord链接

你完全可以通过调用系统浏览器来处理所有Discord相关链接,让浏览器负责解析跳转逻辑,彻底避开WebView对intent://协议的兼容问题。

你的现有代码问题在于,当Discord链接跳转到intent://协议的URL时,直接发起ACTION_VIEW Intent无法确保浏览器接手处理。以下是修改后的代码:

mywebView.setWebViewClient(new LocalContentWebViewClient(assetLoader, this) {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        String url = request.getUrl().toString();
        
        // 匹配所有Discord相关链接,包括跳转后的intent协议链接
        if (url.contains("discord.com/invite/") || 
            url.contains("discordapp") || 
            url.contains("discord.gg") || 
            url.startsWith("intent://discord")) {
            
            // 构造打开浏览器的Intent
            Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            // 添加浏览器类别,确保系统调用浏览器应用
            browserIntent.addCategory(Intent.CATEGORY_BROWSABLE);
            // 开启新任务栈,避免和当前WebView应用栈混淆
            browserIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            
            // 检查是否有可用的浏览器应用
            if (browserIntent.resolveActivity(view.getContext().getPackageManager()) != null) {
                view.getContext().startActivity(browserIntent);
                return true; // 拦截WebView,不再自行加载
            }
        }
        // 非Discord链接继续使用WebView原有逻辑加载
        return super.shouldOverrideUrlLoading(view, request);
    }
});

关键修改说明

  • 新增对intent://discord开头URL的判断,覆盖Discord跳转后的协议链接
  • 通过CATEGORY_BROWSABLE强制系统调用浏览器处理链接,避免其他应用拦截
  • 增加FLAG_ACTIVITY_NEW_TASK确保浏览器在独立栈中打开,提升用户体验
  • 先检查浏览器可用性,避免无浏览器时的崩溃问题

这样修改后,所有Discord相关链接都会直接跳转到系统浏览器,由浏览器处理包括“接受”按钮在内的所有跳转逻辑,不会再出现net::ERR_UNKNOWN_URL_SCHEME错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 02:44:49