Выберите определенные типы файлов, используя ACTION_GET_CONTENT и setType или Intent.EXTRA_MIME_TYPES. - PullRequest
0 голосов
/ 17 мая 2018

Я хочу выбрать только слово, pdf и txt файл из хранилища, используя Intent.ACTION_GET_CONTENT. Но 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, только текстовые файлы и не позволяет выбирать другие типы, в нем отображается опция «Галерея» в меню и позволяет выбирать изображения / видео оттуда (я не могу выбрать изображение из внутреннего хранилища). Итак, как я могу отключить эту опцию галереи (опция Галерея не отображается, когда я просто использую intent.setType())?

1 Ответ

0 голосов
/ 28 мая 2018

Проблема решена с помощью 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);
...