我回答this question关于为什么setType()和setData()不能一起工作。我仍然找不到任何理由。逻辑躲过了我。
来自文档:Intent Documentation
要仅设置数据URI,请调用setData()。要仅设置MIME类型,请调用setType()。如有必要,您可以使用setDataAndType()显式设置它们。
警告:如果要同时设置URI和MIME类型,请不要调用setData()和setType(),因为它们都会使另一个的值无效。始终使用setDataAndType()来设置URI和MIME类型。
答案 0 :(得分:2)
您需要阅读源代码,但可能是因为以下原因。
setType(),setData()和setDataAndType()都在单个数据字段上运行。该字段实际上是两个字段,类型和数据的组合。类型占据一个部分,数据占另一部分。所以说该字段是16位,键入高8位,数据低8位。
setType()可以执行如下操作:
field = (type & 0x0F) << 8;
如您所见,它完全覆盖了字段。所以无论之前有什么,它现在只包含类型信息。
setData可以执行如下操作:
field = data & 0x0F;
如您所见,它也完全覆盖了字段。
然后setDataAndType()必须执行以下操作:
field = ((type & 0x0F) << 8) || (data & 0x0F);
虽然它完全覆盖了字段,但它允许在一次调用中设置数据和类型。
至于为什么事情就是这样 - 可能是以下两个原因之一: