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
相关产品推荐
相关产品推荐

