【问题标题】:Android - need of uri & mime type in intent/intent-filterAndroid - 在意图/意图过滤器中需要 uri 和 mime 类型
【发布时间】:2014-08-19 18:16:45
【问题描述】:

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

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

我想问一下为什么 Android 真的需要数据,即 URI 和 MIME 类型?

为什么不能所有东西都是一个动作和动作的类别?

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

我问这一切也是因为当我看到电话、消息和地图等应用程序时,他们都试图使用 URI 来获取一些可能通过 EXTRAS 的数据。

请有人帮助我阐明 Android 意图机制的这一设计方面。

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    为什么我们通常使用 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, 这表明数据位于设备上并由 ContentProvider,使数据 MIME 类型对系统可见。

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

    注意:如果要同时设置 URI 和 MIME 类型,请不要调用 setData() 和 setType() 因为它们都使 其他。始终使用 setDataAndType() 来设置 URI 和 MIME 类型。

    【讨论】:

      猜你喜欢
      • 2014-08-12
      • 2013-03-13
      • 1970-01-01
      • 2011-05-20
      • 2013-05-03
      • 2015-05-14
      • 1970-01-01
      • 2013-05-04
      • 2012-03-26
      相关资源
      最近更新 更多