Intent.ACTION_GET_CONTENT和Intent.ACTION_PICK之间的区别


70

我正在尝试让用户选择要在其设备上用作我正在构建的此壁纸应用程序中的壁纸的任何图像。由于某种原因,当我写:

Intent myIntent = new Intent(Intent.ACTION_PICK);
myIntent.setType("image/*");
startActivityForResult(myIntent, 100);

我直接进入画廊,但是当我写的时候:

Intent myIntent = new Intent(Intent.ACTION_GET_CONTENT, null);
myIntent.setType("image/*");
startActivityForResult(myIntent, 100);

我可以从Gallery或Google Drive中选择。让用户每次选择哪个应用来检索图片的最佳方法是什么?还是为什么这两个不同的Intent常数会有所不同?

Answers:


99

您的第一个Intent无效。的协议ACTION_PICK要求您提供一个Uri指示,指出要从中进行选择的集合。

让用户每次选择哪个应用来检索图片的最佳方法是什么?

如果希望用户根据MIME类型选择某些内容,请使用ACTION_GET_CONTENT

如果您Uri要用户选择某些特定的集合(由标识),请使用ACTION_PICK

如果打成平手,请选择ACTION_GET_CONTENT。虽然ACTION_PICK没有正式弃用,但Dianne Hackborn建议ACTION_GET_CONTENT


3
有趣的是第一个意图确实有效,尽管它是无效的。虽然欣赏的指针。谢谢
EGHDK

2
出于好奇,为什么Dianne听起来好像ACTION_GET_CONTENT后来被添加到API中,称其为“现代”。它们都可以在API 1中使用,因此,如果他们真的不希望人们使用,那么这让我感到Android工程师感到无聊ACTION_PICK。通过API 1删除它是否为时已晚?
东尼·陈

1
@涡轮增压:你不得不问她,对不起。
CommonsWare 2013年

4
@CommonsWare您是如何获得以简单方式回答每个深层问题的能力。?;)
theapache64 '16

1
@petrsyn:我并不是说那ACTION_PICK是无效的。我说Intent无效,因为它没有指定Uri要选择的集合的。的文档ACTION_PICK的文档中ACTION_GET_CONTENT对此进行了介绍。第二个文档链接的示例不完整;我提出了一个问题,试图修复该示例。
CommonsWare

15

现代的行动ACTION_GET_CONTENT这是更好的支持

ACTION_PICK

活动操作:从数据中选择一个项目,返回选择的内容。

输入: getData()是URI,其中包含从中选择项目的数据目录(vnd.android.cursor.dir / *)。

输出:所选项目的URI。

常数值: “ android.intent.action.PICK”


差异:-

活动操作:允许用户选择一种特定类型的数据并返回

这与ACTION_PICK的不同之处在于,这里我们只是说需要哪种数据,而不是用户可以从中选择的现有数据的URI

A ACTION_GET_CONTENT可以允许用户在数据运行时创建数据(例如拍照或录制声音),让他们浏览网络并下载所需的数据,等等。

参考 http://developer.android.com/reference/android/content/Intent.html#ACTION_GET_CONTENT


2
“ ACTION_PICK已弃用”-从技术上讲,不是。
CommonsWare

在我阅读您的示例之前,我无法分辨ACTION_PICK和ACTION_GET_CONTENT之间的区别:拍照或录制声音。谢谢。
jclova 2014年

当我使用action_get_content时,当我从外部存储卡中选择图像,然后将图像上传到服务器filenotfound异常即将来临,并且从图库中选择同一图像时,它将打开所有文件夹。请给我解决方案..
Ajay

-1
 public static final String ACTION_GET_CONTENT

在API级别1中添加

活动操作:允许用户选择一种特定类型的数据并返回。这与ACTION_PICK的不同之处在于,这里我们只是说需要哪种数据,而不是用户可以从中选择的现有数据的URI。ACTION_GET_CONTENT可以允许用户在数据运行时创建数据(例如拍照或录制声音),让他们浏览网络并下载所需的数据,等等。

通过http://developer.android.com/reference/android/content/Intent.html#ACTION_GET_CONTENT

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.