在Android 1.5及以上版本中访问视频和照片

10

我想使用这里描述的方法,在我的Android应用程序中允许用户选择特定的媒体:Access pictures from Pictures app in my android app

它运行得很好,但问题在于我似乎只能选择视频或照片来呈现给用户,而不能同时选择两者。有没有一种好的方式可以使用以下代码实现:

startActivityForResult(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), SELECT_IMAGE);

谢谢!


雪上加霜的是,当我使用视频方法时,它实际上不允许用户选择媒体,只有在他们选择后才会播放,而且它也不会显示缩略图。我需要重写相册吗?是否有一种方法可以调用相册,然后让它返回所选媒体的Uri? - FunnyLookinHat
4个回答

17

我已经用过这个几次了。最好的方式是类似这样的:

Intent mediaChooser = new Intent(Intent.ACTION_GET_CONTENT);
//comma-separated MIME types
mediaChooser.setType("video/*, images/*");
startActivityForResult(mediaChooser, 1);
即使这不是完全准确的,但在我使用它的所有情况下都可以正常工作。它会打开一个类似相册的活动,其中包含用户库中每个图片/视频的缩略图列表。返回到onActivityResult()的意图有一个额外的叫做“DATA”的属性,其中包含所选媒体的内容:// URI。
编辑:糟糕了,为了获取所选媒体的URI,您实际上需要调用传递给onActivityResult()的意图上的 getData() 方法。

2
Robert - 不知道为什么,每当我使用以下代码行时,就会出现一个空的选择器: mediaChooser.setType("video/, images/");我也尝试了以下代码,但没有成功... mediaChooser.setType("video/, image/");然而,每个单独的代码都可以正常工作...即 mediaChooser.setType("video/"); mediaChooser.setType("image/");你能贴出一个确切可用的代码片段吗?
编辑- 看起来在2.0版本之后这不再适用。
- FunnyLookinHat
3
你好!我正在使用Android 1.6版本,但它无法正常工作!只有图片或者只有视频可以正常显示,你有任何想法吗? - narancs
1
那么为什么这个答案被接受了?它根本不起作用!!!(由提问者所述) - AlikElzin-kilaka
1
应该用image/吗?实际上,如果你想同时支持图片和视频,我只是使用“/*”。 - dongshengcn

2

Kivy - 最简单的方法是创建一个意图来选择一段媒体并将其限制为视频:

Intent pickMedia = new Intent(Intent.ACTION_GET_CONTENT);
pickMedia.setType("video/*");
startActivityForResult(pickMedia,12345);

注意 - 12345是您的应用程序需要在请求回调上监听的整数,以便您可以将接收到的任何信息发送到任何需要的地方。
然后,您还需要使同一活动监听从该意图返回的信息:
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 12345) {
            if (resultCode == Activity.RESULT_OK) {
                Uri selectedVideoLocation = data.getData();

                // Do something with the data...
            } 

        }
    }

Cool?


1
问题是关于访问视频和照片 - 不仅仅是视频。你给出的答案只涉及视频。 - AlikElzin-kilaka
很不幸,在Android 2.0+中你不能这样做 - mediaChooser.setType("video/, images/") 的伪方法不起作用,除非你创建自己的chooser activity来扫描媒体并将其返回到选择器屏幕中,否则你只能让用户在图像和视频之间进行选择。 - FunnyLookinHat
不知道他们在4.2.x中做了什么,但选择多个MIME类型似乎完全没有问题 :) - Ja͢ck

1
intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 1);

1

试试这个

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
startActivityForResult(intent, 101);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接