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

时间:2016-03-23 15:22:10

标签: android

我很难理解ACTION_OPEN_DOCUMENTACTION_GET_CONTENT意图在用于打开可打开文档时的差异。如果我在KitKat之前支持Andriod(不支持ACTION_OPEN_DOCUMENT),我应该与ACTION_GET_CONTENT达成和解吗?

documentation说:

  

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("*/*");

1 个答案:

答案 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