Android - 需要uri&意图/意图过滤器中的mime类型

时间:2014-06-29 00:22:35

标签: android android-intent

我正在尝试理解Android中的意图机制,并且对我想要解决的问题感到困惑。

Android为intent&提供动作+数据+类别意图过滤器。数据提供URI和/或MIME类型。意图也可以有一堆额外的值。

我想问为什么数据,即URI& Android中真的需要MIME类型吗?

为什么一切都不是行动的动作和类别?

URI&从某种意义上说,MIME类型添加,如果它们丢失了会真正破坏什么?

我也问这一切,因为当我看到手机,短信和地图等应用程序时,所有人都会尝试使用URI来获取一些可能通过EXTRAS的数据。

有人请帮助我澄清Android的意图机制的这个设计方面。

1 个答案:

答案 0 :(得分:0)

为什么我们通常使用mime类型?要了解它背后是什么类型的数据,不是吗? Android使用mimetype来了解哪个应用程序可以成为处理特定文件的候选者。

假设您在应用程序中创建了一个PDF文件,并且希望让用户手机中安装的其他应用程序打开它,如果您没有设置mime类型,则Android无法理解哪个应用程序(嗯,它有时可以理解mimetype)可以完美地打开文件,什么应用程序可以毫无问题地处理它...例如,SMS应用程序如何能够处理这个文件?它可能会崩溃!

为什么我们需要数据?好吧,你应该说你想做什么不?如果您想让应用程序编辑您的pdf文件,您可以发送ACTION_EDIT,以便用户打开的应用程序知道“嘿,我可以编辑它!”。但为什么setData()?正如您所说,我们可以使用putExtra,但使用putExtra,您需要知道数据所在的关键字和blabla。对您的应用程序一无所知的应用程序如何正确处理它? setData是一个独特的地方,您可以在其中找到应用程序正确处理操作所需的内容。

来自official docs

  

URI(一个Uri对象),它引用要作用的数据和/或   该数据的MIME类型。通常提供的数据类型   由意图的行动决定。例如,如果操作是   ACTION_EDIT,数据应包含要编辑的文档的URI。   创建意图时,指定类型通常很重要   数据(其MIME类型)以及URI。例如,一项活动   能够显示图像可能无法播放音频   文件,即使URI格式可能类似。所以指定   您的数据的MIME类型有助于Android系统找到最佳状态   组件来接收你的意图。但是,有时可以使用MIME类型   从URI推断 - 特别是当数据是内容时:URI,   表示数据位于设备上并由a控制   ContentProvider,它使数据MIME类型对系统可见。

     

要仅设置数据URI,请调用setData()。要仅设置MIME类型,   调用setType()。如有必要,您可以使用显式设置   setDataAndType()。

     

警告:如果要同时设置URI和MIME类型,请不要调用   setData()和setType()因为它们都使null的值无效   其他。始终使用setDataAndType()来设置URI和MIME类型。