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