【问题标题】:Open non-http links in browser in java在java中的浏览器中打开非http链接
【发布时间】:2025-12-20 18:25:11
【问题描述】:

我的应用中有一个网址,例如“zoommtg://us04.zoom.com”。我想通过 Intent 在浏览器中打开它。由于不是http或https,所以Uri.parse(url)无法解析。如果我再次尝试url="http://"+url;,它可以工作,但会从“zoommtg://”中删除“:”,从而导致错误的网址!我正在使用这个Question的解决方案

【问题讨论】:

  • 这不是任何浏览器都能够处理的 URL。如果您将其手动放入浏览器,它会起作用吗?看起来 Zoom 应用可以处理这个问题。
  • @GenerousBadger 单击链接不会直接打开缩放应用程序。相反,应该在浏览器中打开链接,然后浏览器将开始缩放。

标签: java android parsing android-intent uri


【解决方案1】:

如果它适用于https 但不适用于其他请求,那么您可以尝试在您的AndroidManifest.xml 文件中将cleartexttraffic 设置为true。

请告诉它是否可以解决问题。 :)

【讨论】:

  • src/main/AndroidManifest.xml:14:错误:在包“android”中找不到属性“cleartexttraffic”的资源标识符
【解决方案2】:

zoommtg 似乎是“自定义协议”声明,Web 浏览器无法解析,但如果您确定,http(s) url 版本将起作用,然后只需替换方案

String url = "zoommtg://us04.zoom.com";
url = url.replaceFirst("zoommtg", "https")

如果您确实需要使用不安全的http,那么您必须允许应用执行此类请求,请参阅how to

顺便说一句。你仍然可以使用Uri 类,它不仅限于网络协议...查看一些description of this structure

URI = 方案:[//authority]path[?query][#fragment]

您可以将 String 解析为 Uri 并替换 scheme 部分

Uri.Builder builder = Uri.parse(url).buildUpon();
url = builder.scheme("https").build().toString();

【讨论】: