我很难理解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("*/*");
答案 0 :(得分:24)
ACTION_GET_CONTENT还没有在KitKat中使用文档提供程序吗?
不一定。这取决于发布内容的应用程序的实现。另请注意,DocumentProvider
是特定类型的ContentProvider
。
什么会妨碍我长期持续访问"
您从Uri
返回的ACTION_GET_CONTENT
可能会为您的应用授予临时权限,以便能够阅读和/或撰写内容。该授权最终将失效(例如,当您的流程终止时)。因此,例如,将Uri
作为字符串保存在数据库中可能毫无意义。
存储访问框架的一部分包括内容提供者可以提供可以持续较长时间("长期,持久性")的权限授予的概念。虽然没有什么可以阻止应用在API级别19+上使用ACTION_GET_CONTENT
提供此类持久权限,但ACTION_OPEN_DOCUMENT
会更常见。
基本上,以下两个片段之间有什么区别?
用户体验会有所不同,因为ACTION_OPEN_DOCUMENT
提供标准化的文件浏览器样式界面,而ACTION_GET_CONTENT
是传统的选择器对话框,后面是一些特定于应用程序的UI。
从您作为此内容的使用者的角度来看,ACTION_GET_CONTENT
是您现在要使用的内容;如果您想立即使用内容,请ACTION_OPEN_DOCUMENT
。