Android:让用户从图库中选择图片或视频

时间:2011-02-07 13:50:56

标签: android android-intent mime-types

是否可以以这种方式启动Gallery,以便显示图片和视频?

由于

9 个答案:

答案 0 :(得分:46)

从图库中选择音频文件:

//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/*");

答案 1 :(得分:37)

你这样开始画廊:

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
    }
}

答案 2 :(得分:19)

(编辑:我不再使用它了,我们回到了两个选择“选择图像”和“选择视频”。问题出在一些索尼手机上。所以,它不是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/*"});

答案 3 :(得分:8)

intent.setType("*/*");

这为用户提供了对话框,但至少可以使用ICS。 Haven未在其他平台上进行测试。

答案 4 :(得分:5)

当您需要确定返回的内容类型时,您可以使用内容解析程序来获取返回内容的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
}

答案 5 :(得分:1)

我的Galaxy标签附带的CoolIris可以做到。然而,我的acer betouch上的cooliris不会:S 在我的里程碑上,您无法使用视频网址上​​的选择意图启动图库但是当您在图片网址上启动它时,您可以选择一个视频,它也会返回一个视频网址。

答案 6 :(得分:0)

您需要使用以下内容作为选择意图

Intent photoLibraryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
photoLibraryIntent.setType("image/* video/*");

答案 7 :(得分:0)

UPDATE 2021

终于找到了适用于 Android 9 的解决方案。

这段代码只打开图片应用,可以选择图片和视频。我尝试了一堆不同的组合,这个确切的代码可以让它工作。

    libraryIntent.setType("video/*, image/*");
    String[] mimetypes = {"image/*", "video/*"};
    libraryIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);

答案 8 :(得分:-1)

不,库存图库应用无法实现。您可以尝试搜索执行此操作的应用。