Android可用的MIME类型?

58

在网上进行了几次搜索后,我没有找到一个可以告诉我Android应用程序中不同类型媒体的所有现有MIME类型的地方。

这里是我知道存在并且可用的:

对于文本

"text/plain"

对于图像

"image/jpeg"
"image/bmp"
"image/gif"
"image/jpg"
"image/png"

对于视频

"video/wav"
"video/mp4"

这些是我拥有并且已知可用的,但我缺少几个视频和音频类型的文件。有人知道一个地方可以描述每个 Android MIME 类型吗?或者你们是否曾经对这些不同类型的媒体使用过另一种 MIME 类型?

编辑:

我正在一个监视短信和彩信的应用中使用它,在彩信中,类型管理其中的内容。我拥有的代码适用于8以上的每个版本。


audio/* 类型。 - greenoldman
有关压缩文件(zip和rar)的任何想法吗? - Ram
5个回答

52

第一段代码做了一些可疑的事情。比如假设文件路径中最后一个点总是扩展名。 - user9599745

12
我找不到一个地方可以告诉我所有存在的Android应用程序中不同媒体类型的每个MIME类型。 在Play商店上有超过一百万个应用程序,还有其他地方(例如预装在设备上的应用程序,Amazon AppStore for Android)。给定的设备将拥有这些应用程序的某些组合。如果用户在平板电脑上运行Android 4.3+受限制的配置文件,则给定用户将访问设备上某些应用程序的子集。 因此,无法在编译时知道给定Android设备可以支持诸如ACTION_VIEW活动请求的哪些MIME类型。操作系统本身不支持任何这些MIME类型-它们由应用程序提供。
以下是我知道存在且有效的内容: 某些设备可能预先安装了支持这些MIME类型的应用程序。纯文本是最不可能“开箱即用”支持的类型之一。

我编辑了我的问题,也许现在我使用的方式更有意义。 - JoaoFilipeClementeMartins
2
@JoaoFilipeClementeMartins:这并不改变我的答案。设备支持的MIME类型取决于设备和用户。您可以使用PackageManagerqueryIntentActivities()等方法,在运行时确定当前用户在当前设备上支持什么和不支持什么。 - CommonsWare
1
您是否可以将应用程序的自定义文件扩展名注册为MIME类型?例如,android:mimeType =“application / myapp”android:mimeType =“application / mycustomtype” - IgorGanapolsky
3
@IgorGanapolsky:我不知道你在这里所说的“register”是什么意思。你可以在<intent-filter>结构中使用任何MIME类型。但是,例如,你无法影响MimeTypeMap返回的内容,因为那是硬编码的。 - CommonsWare
@CommonsWare 谢谢。比如说,我在我的组织中有自定义的文件扩展名,用于 JSON 文件。Gmail 仍然会将这些文件视为 application/json 文件并在我的应用程序中打开它们,但它也会在我的应用程序中打开其他/外部的 .json 文件,这是我想避免的。 - IgorGanapolsky
2
@IgorGanapolsky:你的问题在于电子邮件发送者。 Gmail只知道它所接收到的MIME类型,如果没有发送者指定的MIME类型,则可能根据文件扩展名默认为某些类型。如果发送者将JSON文件作为附件附加,并使用application/json作为MIME类型,那么这不是Gmail的错,Gmail只会将其视为application/json处理。故事的寓意是:MIME类型只有在它们是标准的或来自您控制的Web服务器时才有用。 - CommonsWare

9

7
您可以在Android(Java版本)中使用现有的映射。
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext.toLowerCase());

2

Android原生支持哪些MIME类型?

既然这是你目前的问题,让我们先回答这个问题(尽管对于你的MMS用例来说并不完全正确)。

要了解Android本身支持的MIME类型(不考虑其他应用程序),您可以使用以下过程:

  1. 请查阅官方Android文档中的支持的媒体格式列表。

  2. 对于每种媒体格式及其可能的容器格式,请从官方IANA媒体类型列表中找到相应的MIME类型。

  3. 由于实际使用中存在一些未注册的MIME类型,包括Android使用的类型,还需参考已知的Android平台MIME类型列表以转换支持的媒体格式。例如,Matroska视频容器格式(.mkv文件)仅出现在该列表中,而不在IANA列表中。

MMS中可能会遇到哪些MIME类型?

请告诉我在Android应用程序中不同类型媒体的所有现有MIME类型。[…] 我正在一个监视短信和彩信的应用程序中使用它,在MMS类型中管理其中的内容。
对于您的情况,MMS标准将告诉您可以用于其内容的MIME类型。并且像电子邮件一样,MMS似乎不限制其内容可以是什么MIME类型。例如,某个MMS解决方案供应商表示,它将简单地将具有未知MIME类型的内容传递给网络运营商:
“如果下面没有列出格式,则意味着它仍然被API接受,但是[...]根据内容的大小可能会被传递给运营商或者可能不会被传递。”(source
由于应用程序可以定义自己的MIME类型,包括以prs.x.开头的类型,这些类型无法在IANA注册,因此您无法预先知道将遇到哪些MIME类型。

因此,从实际角度考虑,如果您的应用程序可以处理Android平台默认支持的所有MIME类型(请参见上面的列表),那么这是最安全的方法。然后以通用方式处理其他所有内容(由应用程序添加)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接