74

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

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 中进行选择。让用户选择每次从哪个应用程序中检索图片的最佳方法是什么?或者为什么这两个不同的意图常量会有所不同?

4

3 回答 3

102

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

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

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

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

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

于 2013-07-20T18:36:36.320 回答
15

现代行动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

于 2013-07-20T18:28:55.243 回答
-2
 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

于 2013-07-20T18:35:46.130 回答