首页 文章

如何在不支持ACTION_OPEN_DOCUMENT的应用中使用持久URI

提问于
浏览
0

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

我已经阅读了最初使用ACTION_OPEN_DOCUMENT的各种帖子和文档,授予了相应的URI权限,然后在解析器上使用了takePersistableUriPermission .

一切都很好 . 问题是,世界上有很多应用程序管理不支持ACTION_OPEN_DOCUMENT的媒体,但支持ACTION_GET_CONTENT .

我想做的事:

  • 提供应用列表,以允许用户选择他们加载的应用,可以找到他们想要在我的应用中使用的媒体 .

  • 使用所选应用程序选择媒体 .

  • 将该媒体的URI保留到db,以便稍后使用它 .

当选择用于查找媒体的应用程序的初始意图的实现是ACTION_OPEN_DOCUMENT时,这非常有效 .

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

如何通过不支持ACTION_OPEN_DOCUMENT意图的应用程序来弥补需要持久URI的差距?

1 回答

  • 2

    如果你想使用 ACTION_GET_CONTENT

    步骤#1:将数据副本复制到您控制的某个文件(在内容上打开 InputStream 并将字节复制到 FileOutputStream

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

    换句话说,无法保证从 ACTION_GET_CONTENT 回来的 Uri 将在五分钟内有用,更不用说五小时,五天,五周等 .

    或者,集成一个file chooser library并限制自己在文件系统上可见的文件 .

相关问题