Есть ли способ использовать intent.setType()
и предоставлять несколько широких типов (например, изображения и видео)?
Я использую ACTION_GET_CONTENT
. Кажется, он работает только с разделенными запятыми типами.
Есть ли способ использовать intent.setType()
и предоставлять несколько широких типов (например, изображения и видео)?
Я использую ACTION_GET_CONTENT
. Кажется, он работает только с разделенными запятыми типами.
В 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);
На самом деле поддерживаются несколько типов mime. Вы даже пробовали это???
Например: intent.setType("image/*,video/*")
будет отображать фотографии и видеоролики...
Для меня это работает. Он тоже должен работать для вас...
К сожалению, в настоящее время это не поддерживается. У вас есть два варианта:
(1) Используйте тип MIME */*
и примите, что могут быть некоторые вещи, которые пользователь может выбрать, с которыми вы не сможете справиться (и для этого есть достойный путь восстановления); или
(2) Внедрите свой собственный выбор, сделав прямые вызовы менеджеру пакетов, чтобы получить действия, которые могут обрабатывать оба типа MIME для намерения, слияние этих списков и отображение их пользователю.
Кроме того, setType()
не работает с разделенными запятыми типами вообще. Он должен быть одним и только одним типом MIME.
вы можете передавать несколько типов mime, если вы разделяете с |
Intent.setType("application/*|text/*");
для моей работы с точками с запятой.
Пример:
intent.setType("image/*;video/*")
или
sIntent.putExtra("CONTENT_TYPE", "image/*;video/*");
Для меня лучше всего было:
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 или аудио.