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

时间:2013-07-20 18:19:44

标签: java android android-intent android-camera-intent

我试图让用户在他的设备上选择他们想要的任何图像,以便在我构建的壁纸应用程序中用作壁纸。出于某种原因,我写道:

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);

我可以选择图库或Google云端硬盘。让用户选择每次检索图片的应用程序的最佳方法是什么?或者为什么这两个不同的意图常数有所不同?

3 个答案:

答案 0 :(得分:89)

您的第一个Intent无效。 protocol for ACTION_PICK要求您提供Uri,表示您要从中挑选的集合。

  

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

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

如果您希望用户选择某个特定集合(由Uri标识),请使用ACTION_PICK

如果出现平局,请使用ACTION_GET_CONTENT。虽然ACTION_PICK未正式弃用,但Dianne Hackborn recommends ACTION_GET_CONTENT

答案 1 :(得分:14)

现代行动ACTION_GET_CONTENT得到更好的支持

ACTION_PICK

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

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

输出:已挑选项目的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 :(得分:-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