有没有办法使用intent.setType()
和提供多种广泛的类型(如图像和视频)?
我正在使用一个ACTION_GET_CONTENT
. 它似乎只使用逗号分隔的类型。
有没有办法使用intent.setType()
和提供多种广泛的类型(如图像和视频)?
我正在使用一个ACTION_GET_CONTENT
. 它似乎只使用逗号分隔的类型。
在 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);
实际上,支持多种 MIME 类型。你有没有试过???
例如:intent.setType("image/*,video/*")
将显示照片和视频...
对我来说它有效。它也应该对你有用......
[编辑]:这部分有效,因为并非所有画廊应用程序都选择实现对多种 mime 类型过滤器的支持。
抱歉,目前不支持此功能。你有两个选择:
(1) 使用 MIME 类型*/*
并接受用户可以选择的一些您无法处理的事情(并且有一个不错的恢复路径);或者
(2) 实现您自己的活动选择器,直接调用包管理器以获取可以处理意图的两种 MIME 类型的活动,合并这些列表,并将它们显示给用户。
此外,setType()
根本不适用于逗号分隔的类型。它必须是一种且只有一种 MIME 类型。
对我来说最有效的是:
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 或音频。
如果用 | 分隔,则可以传递多种 mime 类型
Intent.setType("application/*|text/*");
对于我使用分号的工作。
例子:
intent.setType("image/*;video/*")
或者
sIntent.putExtra("CONTENT_TYPE", "image/*;video/*");