我试图理解Android中的意图机制,并且对我想要解决的一个问题感到困惑。
Android为意图和意图过滤器提供动作+数据+类别。数据提供URI和/或MIME类型。意图也可以有一堆额外的价值。
我想问,为什么Android中真正需要数据,即URI & MIME类型?
为什么不一切都是行动和行动的范畴呢?
从这个意义上说,URI & MIME类型会增加什么值,如果它们丢失了,那么真正会破坏什么呢?
我之所以问这一切,也是因为当我看到手机、消息传递和地图等应用程序时,所有应用程序都试图使用URI来获取一些数据,这些数据可能是经过额外处理的。
有些人请帮我澄清一下Android意图机制的这个设计方面。
发布于 2014-06-29 00:41:48
为什么我们通常使用哑剧类型?去了解它背后是什么样的数据,不是吗?Android使用mimetype来理解哪个应用程序可能是处理特定文件的候选程序。
假设您在应用程序中创建了一个PDF文件,并且希望让安装在用户电话中的其他应用程序打开它,如果您不设置mime类型,Android无法理解哪个应用程序(嗯,它有时可以理解mimetype)可以很好地打开该文件,以及哪个应用程序可以毫无问题地处理它.例如,如何使SMS应用程序能够处理这个文件?它可能会坠毁!
为什么我们需要数据?好吧,你应该说你想在哪里表现不?如果你想让一个应用程序编辑你的pdf文件,你可以发送一个ACTION_EDIT,让用户打开的应用程序知道“嘿,我可以编辑它!”但为什么是setData()?正如您所说的,我们可以使用putExtra,但是对于putExtra,您需要知道数据所在的键和blabla。一个对应用程序一无所知的应用程序怎么能正确地处理它呢?setData是一个独特的地方,您可以在那里找到应用程序需要正确处理操作的地方。
来自官方文件
URI (一个Uri对象),它引用要操作的数据和/或该数据的MIME类型。提供的数据类型通常由意图的行为决定。例如,如果操作是ACTION_EDIT,数据应该包含要编辑的文档的URI。在创建意图时,除了指定URI之外,通常还必须指定数据类型(其MIME类型)。例如,能够显示图像的活动可能无法播放音频文件,尽管URI格式可能类似。因此,指定数据的MIME类型有助于Android系统找到接收意图的最佳组件。但是,MIME类型有时可以从URI中推断--特别是当数据是内容:URI时,它指示数据位于设备上并由ContentProvider控制,这使得数据MIME类型对系统可见。 若要只设置数据URI,请调用setData()。若要只设置MIME类型,请调用setType()。如果有必要,可以使用setDataAndType()显式地设置这两个选项。 警告:如果您想同时设置URI和MIME类型,请不要调用setData()和setType(),因为它们都会使另一个值无效。始终使用setDataAndType()来设置URI和MIME类型。
https://stackoverflow.com/questions/24472117
复制相似问题