我回答了 this question 为什么 setType() 和 setData() 不能一起工作。我仍然找不到任何原因。这个逻辑使我无法理解。
来自文档:Intent Documentation
最佳答案
您需要阅读源代码,但这可能是因为以下原因。
setType()、setData() 和 setDataAndType() 都对单个数据字段进行操作。字段实际上是类型和数据两个字段的组合。其中类型占据一个部分而数据占据另一部分。所以说字段是16位,输入高8位,数据低8位。
setType() 可以做这样的操作:
field = (type & 0x0F) << 8;
如您所见,它完全覆盖了字段。所以不管之前有什么,它现在只包含类型信息。
setData 可能会执行这样的操作:
field = data & 0x0F;
如您所见,它也完全覆盖了字段。
setDataAndType() 然后必须执行以下操作:
field = ((type & 0x0F) << 8) || (data & 0x0F);
虽然它完全覆盖了字段,但它允许在一次调用中设置数据和类型。
至于为什么事情是这样的——可能是两个原因之一:
关于Android:关于 Intent ,为什么 setType() 和 setData() 相互抵消?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30850694/