android-打开图库并选择图像和视频

时间:2013-04-07 12:41:16

标签: android video android-gallery

在我的项目中,我想按一下按钮打开一个图库,应该可以选择图像或视频来获取它们的路径。

Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

startActivityForResult(i, RESULT_LOAD_IMAGE);

从上面的代码我可以打开图库但在这种情况下我只能选择图像。所以,请帮助我选择视频。 提前谢谢。

9 个答案:

答案 0 :(得分:18)

您可以使用下一个代码段:

Intent mediaChooser = new Intent(Intent.ACTION_GET_CONTENT);
//comma-separated MIME types
mediaChooser.setType("video/*, image/*");
startActivityForResult(mediaChooser, RESULT_LOAD_IMAGE);

但我认为它只适用于ICS或更大的

答案 1 :(得分:10)

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

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

答案 2 :(得分:9)

在Android 6.0及更高版本上使用“video / * image / ”或“image / video / *”类型不起作用时,它只识别您指定的第一个过滤器。我使用这段代码解决了这个问题:

Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("*/*");
photoPickerIntent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] {"image/*", "video/*"});
startActivityForResult(photoPickerIntent, Constants.SELECT_PHOTO);

虽然这会询问用户他们想要使用哪个应用来选择图像/视频。

答案 3 :(得分:8)

下面的代码解决了我的问题

  final Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
                        galleryIntent.setType("*/*");
                        startActivityForResult(galleryIntent, RESULT_LOAD_IMAGE);

答案 4 :(得分:4)

2021 Android 9

这仅提供照片库和谷歌照片作为选项,您可以选择照片和视频。

我已经尝试了所有在线可用的方法,但不小心混合了两种结果有效的解决方案:

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

答案 5 :(得分:3)

这是我所知道的最好......试试这次......

{{1}}

答案 6 :(得分:2)

将您的意图更改为:

Intent i = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI);

在尝试获取视频时,您需要向mediaStore说明视频是有序的而不是您写的图像。

答案 7 :(得分:2)

没有足够的代表发表评论,但是@YYamil的回复效果很好。

Intent mediaChooser = new Intent(Intent.ACTION_GET_CONTENT);
//comma-separated MIME types
mediaChooser.setType("video/*, image/*");
startActivityForResult(mediaChooser, RESULT_LOAD_IMAGE);

如果您使用的是新的registerForResultActivity,请创建ActivityResultContracts.GetMultipleContents()的副本并放入createIntent

    @CallSuper
    override fun createIntent(context: Context, input: String): Intent {
        return Intent(Intent.ACTION_GET_CONTENT)
            .addCategory(Intent.CATEGORY_OPENABLE)
            .setType(input)
            .putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
            .putExtra(Intent.EXTRA_MIME_TYPES, arrayOf("image/*", "video/*")) // this does the trick
    }

答案 8 :(得分:0)

好吧,Android在访问外部内容上有很多限制。我最终使用了第三方图书馆。这个很好。: https://github.com/AnilFurkanOkcun/UWMediaPicker-Android

implementation 'com.github.AnilFurkanOkcun:UWMediaPicker-Android:1.3.0'


UwMediaPicker
.with(this)                     // Activity or Fragment
    .setGalleryMode(UwMediaPicker.GalleryMode.ImageGallery) // GalleryMode: ImageGallery/VideoGallery/ImageAndVideoGallery, default is ImageGallery
.setGridColumnCount(4)                                  // Grid column count, default is 3
    .setMaxSelectableMediaCount(10)                         // Maximum selectable media count, default is null which means infinite
    .setLightStatusBar(true)                                // Is llight status bar enable, default is true
.enableImageCompression(true)               // Is image compression enable, default is false
.setCompressionMaxWidth(1280F)              // Compressed image's max width px, default is 1280
.setCompressionMaxHeight(720F)              // Compressed image's max height px, default is 720
.setCompressFormat(Bitmap.CompressFormat.JPEG)      // Compressed image's format, default is JPEG
.setCompressionQuality(85)              // Image compression quality, default is 85
.setCompressedFileDestinationPath(destinationPath)  // Compressed image file's destination path, default is "${application.getExternalFilesDir(null).path}/Pictures"
.launch{selectedMediaList-> } // (::onMediaSelected)    // Will be called when media is selected