Android: пусть пользователь выбирает изображение или видео из Галереи - PullRequest
33 голосов
/ 07 февраля 2011

Можно ли запустить галерею таким образом, чтобы показывались как фотографии, так и видео?

Спасибо

Ответы [ 8 ]

46 голосов
/ 09 апреля 2014

Выбрать аудио файл из галереи:

//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/*");
38 голосов
/ 04 декабря 2014

Вы запускаете галерею так:

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
    }
}
19 голосов
/ 19 апреля 2016

(РЕДАКТИРОВАТЬ: я больше не использую его, мы вернулись к двум вариантам «выбрать изображение» и «выбрать видео». Проблема была с некоторыми телефонами 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/*"});

8 голосов
/ 07 июня 2012
intent.setType("*/*");

Это предоставляет пользователю диалог, но работает как минимум на ICS. Не тестировался на других платформах.

5 голосов
/ 02 октября 2015

Когда вам нужно определить, какой тип контента был возвращен, вы можете сделать это с помощью Content resolver, чтобы получить тип 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
}
1 голос
/ 27 октября 2011

CoolIris, который поставляется с моей вкладкой galaxy, может это сделать. Однако кулир на моем acer betouch не будет: S На моей вехе вы не можете запустить галерею с намерением выбора на URL-адресе видео, однако, когда вы запускаете ее на URL-адресе изображений, вы можете выбрать видео, и оно также вернет URL-адрес видео.

0 голосов
/ 06 сентября 2013

Для выбора Intent необходимо использовать следующее

Intent photoLibraryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
photoLibraryIntent.setType("image/* video/*");
0 голосов
/ 27 июля 2011

Нет, это невозможно с помощью приложения «Галерея».Вы можете попробовать найти приложение, которое делает это.

...