【问题标题】:What is the mimeType attribute in <data> used for?<data> 中的 mimeType 属性是做什么用的?
【发布时间】:2011-11-01 16:42:46
【问题描述】:

我真的无法理解 mimeType 的含义。我知道它存在,因此ContentProvider 中的getType 方法知道与它匹配的内容。但我仍然不确定它的含义或它是如何使用的。

【问题讨论】:

  • @Randroid 如果有人对 cme​​ts 投反对票......

标签: android mime-types


【解决方案1】:

如果你的意思是 mime 类型它告诉接收实体如何解释文件。就像您看到 .txt 并知道文件是文本文件一样。这样,您可以使用 .anyExtension 提供文件,并让浏览器仍然知道它是 .txt

【讨论】:

  • 遗憾,在android中它并不意味着文件类型。
【解决方案2】:

Mimetype Multipurpose Internet Mail Extensions 是告诉你内容的描述

ASCII 以外的字符集文本

非文本附件

包含多个部分的消息正文

非 ASCII 字符集中的标头信息

还有是否是 Pdf/epub/html/text 等

【讨论】:

    【解决方案3】:

    任何ContentProvider 通常定义它处理的数据类型(例如NotePadProvider 处理在NotePad 的内部类中定义的Notes 数据类型)。 MIME 类型只是通过给它一个唯一的名称来定义该数据类型的标准化方法。这允许以标准化方式将数据类型传达给与 ContentProvider 一起工作的代码。

    它还有助于 ContentProvider 处理几种不同类型的数据以保持事物井井有条,例如RailwayContentProvider 可以处理火车、车站和车票,并且可以使用 MIME 类型来区分它们。

    为什么选择 MIME 类型?

    当您考虑如何通过 URI(即类似于 Internet 上的 URL)访问 ContentProvider 时,使用 MIME 类型是很自然的结果。就像 Internet 上的 MIME 类型一样,例如用于网页的 text/html 和用于 .jpg 图像的 image/jpeg,Android 希望您为 ContentProvider 处理的任何数据类型定义自定义 MIME 类型。

    自定义 MIME 类型示例

    在 NotePad 示例项目的 NotePad(上面链接)类中,您会发现:

    public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.google.note";
    

    此字段定义自定义 MIME 类型(可通过type/subtype 模式识别)。

    Android 建议您使用vnd.android.cursor.dir/... 作为任何类型的“目录列表”(多个项目)的第一部分,并使用vnd.android.cursor.item/... 作为任何类型的单个项目的第一部分。

    对于子类型,再次建议以vnd. 开头,然后添加类似您的反向域名/包名的内容,例如vnd.android.cursor.item/vnd.com.mydomain.myapp.mydata

    为了避免代码中出现所有 vnd... 字符串,ContentResolver 中还有一些常量,例如 CURSOR_DIR_BASE_TYPECURSOR_ITEM_BASE_TYPE

    【讨论】:

    • 如果您想编写自己的ContentProvider,我强烈推荐NotePad example project(由于答案中的链接限制而作为评论发布)。
    • 精彩的答案!!!所以我们可以把我们喜欢的任何东西放在“vnd.android.cursor.dir/”后面,对吧?或者它有一些必须遵循的约束以避免与现有的 mimeTypes 冲突?
    • Android 文档建议您也使用 vnd. 开始子类型(在 / 之后),以将其标记为“自定义 MIME 子类型”see: What is the meaning of "vnd" in MIME types? - 之后只需使用反向域表示法(即 Java 包名称)以获得唯一的名称。有关示例,请参见我的答案的最后一段:)
    • 为了避免代码中出现所有vnd... 字符串,ContentResolver 中还有一些常量,例如CURSOR_DIR_BASE_TYPECURSOR_ITEM_BASE_TYPE
    • @Philipp Reichart:很好的答案,谢谢,它应该和你在文档中的回答一样清楚!
    猜你喜欢
    • 2018-08-24
    • 1970-01-01
    • 2013-07-09
    • 2015-08-05
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    相关资源
    最近更新 更多