我很难理解ACTION_OPEN_DOCUMENT
和ACTION_GET_CONTENT
ACTION_OPEN_DOCUMENT,我应该只接受ACTION_GET_CONTENT
文档是这样说的:
ACTION_OPEN_DOCUMENT
并不打算替代ACTION_GET_CONTENT
。您应该使用的那个取决于您的应用程序的需求:
ACTION_GET_CONTENT
是否也使用KitKat中的文档提供程序?什么会阻止我“长期、持久地访问”?这到底意味着什么?
基本上,以下两个片段有什么区别?
ACTION_GET_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("*/*");
在KitKat中ACTION_GET_CONTENT不也使用文档提供者吗?
不一定。这取决于发布内容的应用程序的实现。另请注意,< code>DocumentProvider是< code>ContentProvider的特定类型。
什么会阻止我拥有“长期、持久的访问权限”
您从ACTION_get_CONTENT
返回的Uri
可能会为您的应用程序授予临时权限,以便能够读取和/或写入内容。该补助金最终将失效(例如,当您的流程终止时)。因此,例如,将<code>Uri</code>保存为数据库中的字符串可能毫无意义。
存储访问框架的一部分包括这样的概念,即内容的提供者可以提供许可授权,该许可授权可以持续很长一段时间(“长期的、持久的”)。虽然没有什么可以阻止应用程序通过API Level 19上的< code>ACTION_GET_CONTENT提供这种持久权限,但它们在< code > ACTION _ OPEN _ DOCUMENT 中会更常见。
基本上,以下两个片段有什么区别?
用户体验会有所不同,因为< code > ACTION _ OPEN _ DOCUMENT 提供了一个标准化的文件浏览器风格的界面,而< code>ACTION_GET_CONTENT是一个传统的选择器对话框,后面是一些特定于应用程序的UI。
从您作为此内容的消费者的角度来看,ACTION_GET_CONTENT
是如果您想立即使用该内容;ACTION_OPEN_DOCUMENT
是如果您想现在和以后使用内容。
编辑:文档链接:
动作_打开_文档
ACTION_GET_CONTENT
来自用于打开特定类型文件的Common Intents示例:
在Android 4.4或更高版本上运行时,您可以使用ACTION_OPEN_DOCUMENT操作并指定MIME类型,而不是检索必须导入应用程序的文件副本(通过使用ACTION_GET_CONTENT操作),而是请求打开由另一个应用程序管理的文件。要允许用户创建应用程序可以写入的新文档,请改用ACTION_CREATE_DOCUMENT操作。例如,ACTION_CREATE_DOCUMENT意图允许用户选择他们想要创建新文档的位置(在管理文档存储的另一个应用程序中),而不是从现有PDF文档中选择。然后,您的应用程序会接收它可以写入新文档的URI位置。
尽管从ACTION_GET_CONTENT操作传递到onActivityResult()方法的意图可能返回任何类型的URI,但ACTION_OPEN_DOCUMENT和ACTION_CREATE_DOCUMENT的结果意图总是将所选文件指定为由DocumentsProvider支持的内容URI。您可以使用openFileDescriptor()打开该文件,并使用DocumentsContract.Document中的列查询其详细信息。