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

时间:2018-05-17 08:37:19

标签: android android-intent mime-types

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

intent.setType

是否可以通过使用intent.setType()?

来获取所有三种文件类型

甚至尝试使用Intent.EXTRA_MIME_TYPES。

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

即使intent.setType("*/*"); intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes); 工作且允许选择PDF,仅限单词文件而且不允许选择其他类型,它会在菜单中列出“图库”选项,并允许从那里选择图像/视频(我不能从内部存储中选择图像)。那么如何禁用此库选项(当我使用EXTRA_MIME_TYPES时,不显示图库选项)?

1 个答案:

答案 0 :(得分:3)

使用Sam建议的Intent.ACTION_OPEN_DOCUMENT代替Intent.ACTION_GET_CONTENT解决了该问题。

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

enter image description here

代码:

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