当ACTION_OPEN_DOCUMENT
和ACTION_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
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
ACTION_OPEN_DOCUMENT
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");
发布于 2016-03-23 15:30:57
ACTION_GET_CONTENT不也在KitKat中使用文档提供程序吗?
不一定。这取决于发布内容的应用程序的实现。还请注意,DocumentProvider
是ContentProvider
的一种特定类型。
什么会阻止我有“长期的,持续的访问”
您从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的列查询其详细信息。
https://stackoverflow.com/questions/36182134
复制相似问题