如何在不支持ACTION_OPEN_DOCUMENT

时间:2018-12-03 00:50:29

标签: android uri persistent-storage

我的应用程序允许用户从他们最喜欢的应用程序中选择媒体(图像,视频,音频)以浏览这些文档。然后,我将该图像的URI(而不是下载整个图像)存储到db中。重新启动应用程序时,我需要利用这些URI来提取缩略图,对于图像,要提取URI中的完整图像,以便在应用程序中显示它们。

我已经阅读了有关最初使用ACTION_OPEN_DOCUMENT,授予适当的URI权限,然后在解析器上使用takePersistableUriPermission的各种文章和文档。

一切正常。问题在于,世界上有很多个应用程序在管理不支持ACTION_OPEN_DOCUMENT但支持ACTION_GET_CONTENT的媒体选择。

我想做什么:

  1. 提供应用程序列表,以允许用户选择已加载的应用程序,可以为他们找到要在我的应用程序中使用的媒体。
  2. 使用选定的应用选择媒体。
  3. 将媒体的URI保留到数据库中,以便以后使用。

当选择用于查找媒体的应用的初始意图的实现为ACTION_OPEN_DOCUMENT时,此方法非常有效。

我不需要在媒体上执行写操作-只需打开选择(并利用用户选择的结果URI),然后存储此URI供以后使用。

如何弥合需要持久URI与不支持ACTION_OPEN_DOCUMENT意图的应用程序之间的差距?

1 个答案:

答案 0 :(得分:2)

如果您想使用ACTION_GET_CONTENT

步骤1:将数据复制到您控制的某个文件中(在内容上打开InputStream,然后将字节复制到FileOutputStream

步骤2:坚持指向您数据副本的Uri

换句话说,我们无法保证您从Uri回来的ACTION_GET_CONTENT会在5分钟内有用,更不用说5小时,5天,5周等了。

或者,集成file chooser library并将自己限制为文件系统上对您可见的文件。