有没有一种使用intent.setType()
和提供多种广泛类型(例如图像和视频)的方法?
我正在使用ACTION_GET_CONTENT
。它似乎只使用逗号分隔的类型。
有没有一种使用intent.setType()
和提供多种广泛类型(例如图像和视频)的方法?
我正在使用ACTION_GET_CONTENT
。它似乎只使用逗号分隔的类型。
Answers:
在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);
EXTRA_MIME_TYPES
它不会替代setType
。您仍然需要setType
这种方法。
实际上,支持多种mime类型。你甚至尝试过吗?
例如:intent.setType("image/*,video/*")
将显示照片和视频...
对我来说,它有效。它也应该为您工作...
[编辑]:这部分起作用,因为并非所有图库应用程序都选择实现对多种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或音频。
抱歉,目前不支持此功能。您有两种选择:
(1)使用MIME类型 */*
并接受用户可能会选择的某些内容,您将无法处理(并且有适当的恢复路径);要么
(2)实现您自己的活动选择器,直接在程序包管理器上进行调用,以获取可以处理两种MIME类型意图的活动,合并这些列表并将其显示给用户。
另外,setType()
根本不使用逗号分隔的类型。它必须是一种且只有一种MIME类型。