首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用ACTION_GET_CONTENT和setType或Intent.EXTRA_MIME_TYPES选择特定的文件类型

使用ACTION_GET_CONTENT和setType或Intent.EXTRA_MIME_TYPES选择特定的文件类型
EN

Stack Overflow用户
提问于 2018-05-17 16:37:19
回答 1查看 4.4K关注 0票数 3

我只想选择word,pdf和txt文件从存储中使用Intent.ACTION_GET_CONTENT。但是带有多个选项的intent.setType不起作用(在android 5.1.1设备上尝试过这个功能,甚至pdf文件都是灰色的,无法选择)。

代码语言:javascript
复制
intent.setType("application/msword|text/plain|application/pdf");

仅仅使用intent.setType()就可以获得所有三种文件类型吗?

甚至还在Intent.EXTRA_MIME_TYPES上尝试过。

代码语言:javascript
复制
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);

尽管EXTRA_MIME_TYPES只允许选择PDF,word文件,不允许选择其他类型,但它在菜单中列出了"Gallery“选项,并允许从那里选择图像/视频(我不能从内存中选择图像)。那么我如何禁用这个图库选项(当我只使用intent.setType()时,图库选项不显示)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-28 20:01:16

按照Sam的建议,使用Intent.ACTION_OPEN_DOCUMENT而不是Intent.ACTION_GET_CONTENT来解决此问题。

对于ACTION_GET_CONTENT,菜单有额外的选项(在图像中用红色方框标记),这些选项不支持MIME类型。使用ACTION_OPEN_DOCUMENT时,这些标记为红色的选项将不会显示。

代码:

代码语言:javascript
复制
String[] supportedMimeTypes = {"application/pdf","application/msword"};
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
  intent.setType(supportedMimeTypes.length == 1 ? supportedMimeTypes[0] : "*/*");
  if (supportedMimeTypes.length > 0) {
    intent.putExtra(Intent.EXTRA_MIME_TYPES, supportedMimeTypes);
  }
} else {
  String mimeTypes = "";
  for (String mimeType : supportedMimeTypes) {
    mimeTypes += mimeType + "|";
  }
  intent.setType(mimeTypes.substring(0,mimeTypes.length() - 1));
}
startActivityForResult(intent, REQUEST_CODE);
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50386916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档