85

有没有办法使用intent.setType()和提供多种广泛的类型(如图像视频)?

我正在使用一个ACTION_GET_CONTENT. 它似乎只使用逗号分隔的类型。

4

6 回答 6

137

在 Android 4.4 中,当使用Storage Access Framework时,您可以使用EXTRA_MIME_TYPES传递多种 mime 类型。

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
String[] mimetypes = {"image/*", "video/*"};
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
startActivityForResult(intent, REQUEST_CODE_OPEN);
于 2014-05-02T11:11:53.363 回答
20

实际上,支持多种 MIME 类型。你有没有试过???

例如:intent.setType("image/*,video/*") 将显示照片和视频...

对我来说它有效。它也应该对你有用......

[编辑]:这部分有效,因为并非所有画廊应用程序都选择实现对多种 mime 类型过滤器的支持。

于 2013-07-25T19:39:37.513 回答
4

抱歉,目前不支持此功能。你有两个选择:

(1) 使用 MIME 类型*/*并接受用户可以选择的一些您无法处理的事情(并且有一个不错的恢复路径);或者

(2) 实现您自己的活动选择器,直接调用包管理器以获取可以处理意图的两种 MIME 类型的活动,合并这些列表,并将它们显示给用户。

此外,setType()根本不适用于逗号分隔的类型。它必须是一种且只有一种 MIME 类型。

于 2012-05-18T02:34:29.967 回答
2

对我来说最有效的是:

intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);


您可以像这样添加几种 mime 类型

intent.setType("image/*|application/pdf|audio/*");

但是意图选择器将只显示可以处理图像的应用程序,因为它是 mime 类型字符串中的第一个。

但是,如果您安装了文件管理器(我使用 CyanogenMod 文件管理器进行了测试),您可以选择音频、pdf 或图像文件。

如果音频 mime 类型是第一个,像这样:

intent.setType("audio/*|image/*|application/pdf");

意图选择器将仅显示处理音频的应用程序。
再次使用文件管理器,您可以选择图像、pdf 或音频。

于 2015-04-07T16:56:23.597 回答
0

如果用 | 分隔,则可以传递多种 mime 类型

Intent.setType("application/*|text/*");
于 2014-09-02T12:16:31.910 回答
-3

对于我使用分号的工作。

例子:

intent.setType("image/*;video/*")

或者

sIntent.putExtra("CONTENT_TYPE", "image/*;video/*"); 
于 2014-03-04T16:38:56.737 回答