gpt4 book ai didi

android - 是否可以使用 Uri.Builder 而没有 "//"部分?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:50 24 4
gpt4 key购买 nike

我正在尝试构建一个 mailto: uri 以使用 GMail 应用程序发送邮件。我想使用 android.net.Uri.Builder 类来执行此操作,但生成的 uri 的格式为 mailto://test@example.com,这使得 GMail 应用认为收件人是 //test@example.com,而不仅仅是 test@example.com

我最终这样做了:

String uriStr = uriBuilder.toString();
uriStr = uriStr.replaceAll("//", "");
final Uri uri = Uri.parse(uriStr);

但显然,这是一个丑陋的 hack...

没有 // 部分就无法构建 uri 吗?

最佳答案

这里有几个问题。虽然可以删除 // 部分,但您将丢失查询字符串。主要问题是 Uri.Builder 不允许您使用带有不透明 URI 的查询(不透明 URI 是绝对 URI,其特定于方案的部分不以斜杠字符开头,例如 mailto: URI ).

也就是说,您应该使用 uriBuilder.opaquePart() 而不是 uriBuilder.authority() 因为后者是 implicitly sets your URI to hierarchical ,即不透明。这将摆脱 //,但是你缺少查询部分,你不能设置它,因为对 uriBuilder.appendQueryParameter() 的任何调用也是 implies a hierarchical URI .

长话短说,要构造一个包含查询的不透明 mailto: URI,您必须使用

Uri uri = Uri.parse("mailto:receipient@mail.com?subject=title&body=text");

相反。当然,文字 titletext 应该是 Uri.encode()ed。

关于android - 是否可以使用 Uri.Builder 而没有 "//"部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8534899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com