【问题标题】:Select specific file types using ACTION_GET_CONTENT and setType or Intent.EXTRA_MIME_TYPES使用 ACTION_GET_CONTENT 和 setType 或 Intent.EXTRA_MIME_TYPES 选择特定文件类型
【发布时间】:2018-10-27 10:54:39
【问题描述】:

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

intent.setType("application/msword|text/plain|application/pdf");

仅使用intent.setType() 是否可以获取所有三种文件类型?

甚至用 Intent.EXTRA_MIME_TYPES 尝试过。

intent.setType("*/*");
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);

尽管EXTRA_MIME_TYPES 工作并且只允许选择 PDF、word 文件并且不允许选择其他类型,但它在菜单中列出了“图库”选项并允许从那里选择图像/视频(我无法选择图像从内部存储)。那么如何禁用此图库选项(仅使用intent.setType() 时不显示图库选项)?

【问题讨论】:

标签: android android-intent mime-types


【解决方案1】:

使用 Sam 建议的 Intent.ACTION_OPEN_DOCUMENT 而不是 Intent.ACTION_GET_CONTENT 解决了这个问题。

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

代码:

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);

【讨论】:

    猜你喜欢
    • 2018-07-30
    • 2015-02-27
    • 2021-09-11
    • 2013-07-13
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多