Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ACTION\u GET\u内容和ACTION\u OPEN\u文档之间的真正区别是什么?_Android - Fatal编程技术网

Android ACTION\u GET\u内容和ACTION\u OPEN\u文档之间的真正区别是什么?

Android ACTION\u GET\u内容和ACTION\u OPEN\u文档之间的真正区别是什么?,android,Android,我很难理解ACTION\u OPEN\u DOCUMENT和ACTION\u GET\u CONTENTintents在用于打开可打开文档时的区别。如果我在KitKat之前支持Andriod,而KitKat不支持操作\u打开\u文档,我是否应该只解决操作\u获取内容 报告说: 不打算取代 . 你应该使用的那个取决于你的需要 您的应用程序: 如果您希望应用程序只需读取/导入,请使用 数据。通过这种方法,应用程序导入数据的副本,例如 图像文件 如果您希望您的应用程序具有 对文档拥有的文档的长期、持

我很难理解
ACTION\u OPEN\u DOCUMENT
ACTION\u GET\u CONTENT
intents在用于打开可打开文档时的区别。如果我在KitKat之前支持Andriod,而KitKat不支持
操作\u打开\u文档
,我是否应该只解决
操作\u获取内容

报告说:

不打算取代 . 你应该使用的那个取决于你的需要 您的应用程序:

  • 如果您希望应用程序只需读取/导入,请使用 数据。通过这种方法,应用程序导入数据的副本,例如 图像文件
  • 如果您希望您的应用程序具有 对文档拥有的文档的长期、持久访问 供应商。例如,一个允许用户编辑的照片编辑应用程序 存储在文档提供程序中的图像
在KitKat中,
ACTION\u GET\u CONTENT
不也使用文档提供者吗?什么会阻止我“长期、持久地访问”,这到底意味着什么

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

行动获取内容

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");
行动\u打开\u文档

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");
ACTION\u GET\u内容在KitKat中不也使用文档提供者吗

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

什么会阻止我“长期、持久地访问”

您从
ACTION\u get\u CONTENT
返回的
Uri
可能会为您的应用程序授予临时权限,以便能够读取和/或写入内容。该授权最终将失效(例如,当您的流程终止时)。因此,例如,将
Uri
保存为数据库中的字符串可能毫无意义

存储访问框架的一部分包括这样一个概念:内容提供商可以提供可以持续较长时间(“长期、持久”)的权限授予。虽然没有什么可以阻止应用程序在API级别19+上通过
ACTION\u GET\u CONTENT
提供此类持久权限,但它们在
ACTION\u OPEN\u DOCUMENT
中更为常见

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

用户体验将有所不同,因为
ACTION\u OPEN\u DOCUMENT
提供了标准化的文件浏览器风格的界面,而
ACTION\u GET\u CONTENT
是一个传统的选择器对话框,后面是一些特定于应用程序的UI

从您作为该内容消费者的角度来看,
操作获取内容
是指您是否现在就想使用该内容<代码>操作\u打开\u文档是指您现在或以后是否要使用内容

编辑:文档链接:

从:

在Android 4.4或更高版本上运行时,您可以使用“打开文档”操作并指定MIME类型来请求打开由另一个应用程序管理的文件,而不是检索必须导入应用程序的文件副本(通过使用“获取内容”操作)。要允许用户创建应用程序可以写入的新文档,请改用“创建文档”操作。例如,与从现有PDF文档中选择不同,“创建文档意图”操作允许用户选择创建新文档的位置(在另一个管理文档存储的应用程序中)-然后,您的应用程序将接收其可以写入新文档的URI位置

虽然从ACTION_GET_CONTENT操作传递到onActivityResult()方法的意图可能返回任何类型的URI,但从ACTION_OPEN_文档和ACTION_CREATE_文档传递到onActivityResult()方法的结果意图始终将所选文件指定为DocumentsProvider支持的CONTENT:URI。您可以使用openFileDescriptor()打开文件,并使用DocumentsContract.Document中的列查询其详细信息


根据我的经验,从来没有选择器对话框。这两个操作产生相同的全屏UI。它就像一个文件浏览器,但你也可以选择滑出一个装满应用程序图标的左抽屉。使用每个操作的唯一区别是左侧的应用程序列表。当我传递图像MIME类型时,GET_内容不仅允许我浏览我的文件夹(如下载),还允许我在幻灯片左抽屉中输入谷歌照片、Dropbox等。如果我使用OPEN_文档,我会得到完全相同的UI,左抽屉中没有任何应用程序愿意为我提供除Google Drive以外的内容。@Stephen:“从来没有选择器对话框”-ACTION\u GET\u CONTENT将在Android 4.3及更高版本上有一个对话框。“使用每个操作的唯一区别是左侧的应用程序列表“--有些应用程序支持其中一种操作,有些则支持另一种操作。理想情况下,Dropbox这样的应用程序在Android 4.4+上支持
ACTION\u OPEN\u DOCUMENT
,在Android 4.3及更低版本上支持
ACTION\u GET\u CONTENT
。我刚刚在4.3设备上安装了我的应用程序,你说得对!出现了一个“选择器”,而不是“文件浏览器”类型的界面。谢谢你的帮助!顺便说一下,我喜欢你的书。我已经订阅了好几年了。@斯蒂芬:谢谢你的好话!