Intent.ACTION_GET_CONTENT和Intent.ACTION_PICK的区别

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

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


答案 1

您的第一个是无效的。ACTION_PICK协议要求您提供指示要从中选取的集合。IntentUri

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

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

如果希望用户从中选取某些特定集合(由 a 标识),请使用 。UriACTION_PICK

如果出现平局,请使用 .虽然没有被正式弃用,但Dianne Hackborn建议ACTION_GET_CONTENTACTION_GET_CONTENTACTION_PICK


答案 2

现代行动是 ,这得到了更好的支持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


推荐