Можно ли запустить галерею таким образом, чтобы показывались и картинки, и видео?
Спасибо
Можно ли запустить галерею таким образом, чтобы показывались и картинки, и видео?
Спасибо
Вы запускаете галерею как таковую:
Intent pickIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
pickIntent.setType("image/* video/*");
startActivityForResult(pickIntent, IMAGE_PICKER_SELECT);
затем в вашем onActivityResult
вы можете проверить, было ли выбрано видео или изображение, выполнив следующие действия:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
Uri selectedMediaUri = data.getData();
if (selectedMediaUri.toString().contains("image")) {
//handle image
} else if (selectedMediaUri.toString().contains("video")) {
//handle video
}
}
selectedMediaUri.toString().contains("image")
будет работать вместо этого слова images
.
- person coderpc; 08.06.2017
requestCode == IMAGE_PICKER_SELECT
в обратном вызове? многие практические действия могут иметь целую кучу вещей, обработанных в onActivityResult
.
- person Cee McSharpface; 05.08.2017
//Use MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
//Use MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
//Use MediaStore.Images.Media.EXTERNAL_CONTENT_URI
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/* video/*");
(РЕДАКТИРОВАТЬ: я больше не использую его, мы вернулись к двум вариантам "выбрать изображение" и "выбрать видео". Проблема была с одним телефоном Sony. Так что это не 100% решение ниже, будьте осторожны ! )
Это то, что я использую:
if (Build.VERSION.SDK_INT < 19) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/* video/*");
startActivityForResult(Intent.createChooser(intent, getResources().getString(R.string.select_picture)), SELECT_GALLERY);
} else {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] {"image/*", "video/*"});
startActivityForResult(intent, SELECT_GALLERY_KITKAT);
}
Ключ здесь intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] {"image/*", "video/*"});
intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] {"video/*"});
, поскольку тип уже был установлен с помощью intent.setType("image/*");
?
- person samis; 17.04.2017
intent.setType("*/*");
Это представляет пользователю диалог, но работает по крайней мере на ICS. На других платформах не тестировал.
Когда вам нужно определить, какой тип содержимого был возвращен, вы можете сделать это с помощью преобразователя содержимого, чтобы получить MIME-тип возвращенного содержимого:
if( data != null) {
Uri selectedUri = data.getData();
String[] columns = { MediaStore.Images.Media.DATA,
MediaStore.Images.Media.MIME_TYPE };
Cursor cursor = getContentResolver().query(selectedUri, columns, null, null, null);
cursor.moveToFirst();
int pathColumnIndex = cursor.getColumnIndex( columns[0] );
int mimeTypeColumnIndex = cursor.getColumnIndex( columns[1] );
String contentPath = cursor.getString(pathColumnIndex);
String mimeType = cursor.getString(mimeTypeColumnIndex);
cursor.close();
if(mimeType.startsWith("image")) {
//It's an image
}
else if(mimeType.startsWith("video")) {
//It's a video
}
}
else {
// show error or do nothing
}
CoolIris, поставляемый с моим планшетом Galaxy, может это сделать. Однако Cooliris на моем acer betouch не будет: S На моем этапе вы не можете запустить галерею, указав намерение выбрать URL-адрес видео, однако, когда вы запускаете ее по URL-адресу изображения, вы можете выбрать видео, и он вернет URL-адрес видео слишком.
Вам нужно использовать следующее как выбор Intent
Intent photoLibraryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
photoLibraryIntent.setType("image/* video/*");
UPDATE 2021
НАКОНЕЦ-ТО решение работает для Android 9.
Этот фрагмент кода открывает только приложения с изображениями, и вы можете выбрать как изображения, так и видео. Я пробовал кучу разных комбинаций, и этот точный код заставит его работать.
libraryIntent.setType("video/*, image/*");
String[] mimetypes = {"image/*", "video/*"};
libraryIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);