我正在为Android创建一个Intent,用于发送电子邮件。
我对 Uri.fromParts 的行为感到困惑。
小米码:这工作正常!
uri=Uri.parse(
"mailto:" + toAddress +
(subject != null ?
("?" + "subject=" + Uri.encode(subject)) :
"")
前面的工作很好,并以mailto:john@doe.com?subject=Test
的形式创建一个 Uri
但是,如果我尝试使用 Uri.from 部件,则此示例:
uriBuilder=Uri.fromParts("mailto",toAddress,null).buildUpon();
if (subject!=null) {
uriBuilder.appendQueryParameter("subject",subject);
}
uri=uriBuilder.build();
我收到一个错误。最后一个 uri 是mailto:?subject=Test
中间是正确的,但是当我使用 appendQueryParameter 时,它会删除 mailto 方案之后的内容。
你知道为什么吗?这是这样做的规范方法吗?
Uri#fromParts()
从给定组件创建不透明 Uri。对 ssp 进行编码,这意味着此方法不能用于创建分层 URI。
当您对此调用buildUpon()
时,Builder
包含方案、特定于方案的部分 (ssp( 和片段(在您的情况下为 null(。
然后,appendQueryParameter()
将Builder
转换为分层,删除不透明的 SSP 数据。
我认为没有"规范"的方式。只是不要混合分层和不透明的构建器。
有关引擎盖下发生的情况的详细信息,请阅读来源。