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

EGH*_*HDK 64 java android android-intent android-camera-intent

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

Intent myIntent = new Intent(Intent.ACTION_PICK);
myIntent.setType("image/*");
startActivityForResult(myIntent, 100);
Run Code Online (Sandbox Code Playgroud)

我直接进入画廊,但是当我写道:

Intent myIntent = new Intent(Intent.ACTION_GET_CONTENT, null);
myIntent.setType("image/*");
startActivityForResult(myIntent, 100);
Run Code Online (Sandbox Code Playgroud)

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

Com*_*are 94

你的第一个Intent无效.该协议ACTION_PICK要求您提供Uri指示您正在挑选的集合.

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

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

如果您有一些Uri您希望用户选择的特定集合(由a标识),请使用ACTION_PICK.

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

  • @CommonsWare你是如何以简单的方式获得回答每个深层问题的力量的.?;) (4认同)
  • 有趣的是第一个意图确实有效,尽管它无效.虽然赞赏指针.谢谢 (2认同)
  • 出于好奇,为什么Dianne听起来好像后来将“ ACTION_GET_CONTENT”添加到了API,并将其称为“现代”。它们都可以在API 1中使用,因此,如果他们真的不希望人们使用“ ACTION_PICK”,那么这让我感觉像是Android工程师感到无所适从。通过API 1删除它是否为时已晚? (2认同)

Tar*_*ngh 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

  • "ACTION_PICK已被弃用" - 从技术上讲,它不是. (2认同)