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

sta*_*ack 13 video android android-gallery

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

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

startActivityForResult(i, RESULT_LOAD_IMAGE);
Run Code Online (Sandbox Code Playgroud)

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

Jc *_*rro 18

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

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

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

  • 在6.0上,这只允许选择视频 (9认同)
  • 应该是"image/*"而不是"images/*" (5认同)

YYa*_*mil 14

在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);
Run Code Online (Sandbox Code Playgroud)

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

  • 它还显示其他应用程序,例如联系人、谷歌音乐。 (5认同)

KIL*_*ILA 10

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

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

  • 不起作用 仅考虑第一种类型。 (5认同)

sta*_*ack 6

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

  final Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
                        galleryIntent.setType("*/*");
                        startActivityForResult(galleryIntent, RESULT_LOAD_IMAGE);
Run Code Online (Sandbox Code Playgroud)

  • 这是一个不能过滤任何东西的糟糕解决方案,你可以选择一个pdf ... (8认同)

小智 5

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

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

如果您正在使用新的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
    }
Run Code Online (Sandbox Code Playgroud)


Gab*_*son 5

2021 Android 9

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

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

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