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

cam*_*ous 32 android

我有一个很难理解的区别ACTION_OPEN_DOCUMENTACTION_GET_CONTENT意图时,他们被用来打开可打开的文档.如果我在KitKat之前支持Andriod,那ACTION_OPEN_DOCUMENT我不支持,我应该和我一起解决ACTION_GET_CONTENT吗?

文件说,这:

ACTION_OPEN_DOCUMENT不打算替代 ACTION_GET_CONTENT.您应该使用的那个取决于您的应用程序的需求:

  • 使用ACTION_GET_CONTENT如果你希望你的应用程序只需读取/导入数据.使用此方法,应用程序将导入数据的副本,例如图像文件.
  • 使用ACTION_OPEN_DOCUMENT,如果你希望你的应用,以获得长期,持续的访问由文件提供者所拥有的文件.一个例子是照片编辑应用程序,它允许用户编辑存储在文档提供程序中的图像.

ACTION_GET_CONTENTKitKat中是否也使用文档提供程序?什么会阻止我"长期,持久访问",这究竟是什么意思?

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

ACTION_GET_CONTENT

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
Run Code Online (Sandbox Code Playgroud)

ACTION_OPEN_DOCUMENT

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");
Run Code Online (Sandbox Code Playgroud)

Com*_*are 32

ACTION_GET_CONTENT也不使用KitKat中的文档提供程序吗?

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

什么会阻止我"长期,持久访问"

Uri说你从后面ACTION_GET_CONTENT可能有它的临时权限授予为您的应用程序,以便能够读取和/或写的内容.该授权最终将失效(例如,当您的流程终止时).因此,例如,将Uri字符串保存在数据库中可能毫无意义.

存储访问框架的一部分包括内容提供者可以提供可以持续较长时间("长期,持久")的权限授予的概念.虽然没有什么可以阻止应用程序ACTION_GET_CONTENT在API级别19+上提供这样的持久权限,但它们会更常见ACTION_OPEN_DOCUMENT.

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

用户体验会有所不同,因为ACTION_OPEN_DOCUMENT它提供了标准化的文件浏览器样式界面,而ACTION_GET_CONTENT传统的选择器对话框则是一些特定于应用程序的UI.

从您作为此内容的消费者的角度来看,ACTION_GET_CONTENT如果您想立即使用该内容; ACTION_OPEN_DOCUMENT如果你想现在和以后使用这些内容.

  • 根据我的经验,从来没有选择器对话框.这两个动作导致相同的全屏UI.它就像一个文件浏览器,但您也可以选择滑出一个充满应用程序图标的左侧抽屉.使用每个操作的唯一区别是左侧的此应用程序列表.当我传递图像MIME类型时,GET_CONTENT不仅可以浏览我的文件夹,例如下载,还可以在Google Photos,Dropbox等左侧抽屉上输入一个条目.如果我使用OPEN_DOCUMENT,我会获得完全相同的UI,左侧抽屉里没有任何应用程序愿意为我提供Google云端硬盘以外的内容. (8认同)
  • @Stephen:"从来没有一个选择器对话框" - "ACTION_GET_CONTENT"将在Android 4.3及更早版本上有一个."使用每个动作的唯一区别是左侧的这个应用程序列表" - 一些应用支持其中一个动作,一些支持另一个动作.理想情况下,像Dropbox这样的应用程序会在Android 4.4+上支持"ACTION_OPEN_DOCUMENT",在Android 4.3及更低版本上支持"ACTION_GET_CONTENT". (3认同)