首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ACTION_GET_CONTENT和ACTION_OPEN_DOCUMENT的真正区别是什么?

ACTION_GET_CONTENT和ACTION_OPEN_DOCUMENT的真正区别是什么?
EN

Stack Overflow用户
提问于 2016-03-23 15:22:09
回答 1查看 16.2K关注 0票数 63

ACTION_OPEN_DOCUMENTACTION_GET_CONTENT意图用于打开可操作的文档时,我很难理解它们之间的区别。如果我在KitKat之前支持Andriod,它不支持ACTION_OPEN_DOCUMENT,那么我应该与ACTION_GET_CONTENT和解吗?

文档说:

ACTION_OPEN_DOCUMENT并不打算取代ACTION_GET_CONTENT。您应该使用的应用程序取决于应用程序的需求:

  • 如果您想让应用程序简单地读取/导入数据,请使用ACTION_GET_CONTENT。使用这种方法,应用程序将导入数据的副本,如图像文件。
  • 如果您希望您的应用程序对文档提供程序拥有的文档具有长期、持久的访问权限,请使用ACTION_OPEN_DOCUMENT。一个例子就是一个照片编辑应用程序,它允许用户编辑存储在文档提供者中的图像。

ACTION_GET_CONTENT不也在KitKat中使用文档提供程序吗?什么会阻止我有“长期的,持续的访问”,这到底是什么意思?

基本上,以下两个片段之间有什么区别?

ACTION_GET_CONTENT

代码语言:javascript
运行
复制
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");

ACTION_OPEN_DOCUMENT

代码语言:javascript
运行
复制
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-23 15:30:57

ACTION_GET_CONTENT不也在KitKat中使用文档提供程序吗?

不一定。这取决于发布内容的应用程序的实现。还请注意,DocumentProviderContentProvider的一种特定类型。

什么会阻止我有“长期的,持续的访问”

您从Uri获得的ACTION_GET_CONTENT可能会为您的应用程序授予临时权限,以便能够读取和/或写入内容。该授权最终将失效(例如,当您的流程终止时)。因此,例如,将Uri保存为数据库中的字符串可能是没有意义的。

存储访问框架()的一部分包含了这样的概念,即内容提供者可以提供可持续更长时间(“长期、持久”)的权限授予。虽然没有什么能阻止应用程序在API级别的ACTION_GET_CONTENT上提供这样的持久权限,但是在ACTION_OPEN_DOCUMENT中它们会更常见。

基本上,以下两个片段之间有什么区别?

用户体验会有所不同,因为ACTION_OPEN_DOCUMENT提供了标准化的文件资源管理器风格的界面,而ACTION_GET_CONTENT是一个传统的选择器对话框,然后是一些特定于应用程序的UI。

从您作为这个内容的使用者的角度来看,ACTION_GET_CONTENT是如果您现在想要使用该内容;ACTION_OPEN_DOCUMENT是如果您想现在和以后使用该内容。

编辑:指向文档的链接:

文档

内容

来自打开特定类型文件的通用意图示例

在Android4.4或更高版本上运行时,您可以通过使用ACTION_GET_CONTENT操作和指定MIME类型来请求打开另一个应用程序管理的文件,而不是检索必须导入到应用程序中的文件副本(通过使用ACTION_GET_CONTENT操作)。若要允许用户创建您的应用程序可以写入的新文档,请使用ACTION_CREATE_DOCUMENT操作。例如,ACTION_CREATE_DOCUMENT意图不是从现有的PDF文档中选择,而是允许用户选择他们希望在哪里创建一个新文档(在管理文档存储的另一个应用程序中),然后-your应用程序接收它可以在哪里写入新文档的URI位置。 虽然从onActivityResult操作传递到您的ACTION_GET_CONTENT ()方法的意图可能返回任何类型的URI,但是来自ACTION_OPEN_DOCUMENT和ACTION_CREATE_DOCUMENT的结果意图总是将所选的文件指定为由DocumentsProvider支持的内容: URI。您可以使用openFileDescriptor()打开文件,并使用来自DocumentsContract.Document的列查询其详细信息。

票数 56
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36182134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档