Android 如何对不支持ACTION\u OPEN\u文档的应用程序使用持久化URI

Android 如何对不支持ACTION\u OPEN\u文档的应用程序使用持久化URI,android,uri,persistent-storage,Android,Uri,Persistent Storage,“我的应用程序”允许用户从他们最喜欢的应用程序中选择媒体图像、视频和音频来浏览这些文档。然后,我将URI存储到该图像中,而不是将整个图像下载到数据库中。在重新启动应用程序时,我需要利用这些URI来提取缩略图,对于图像,需要从URI中提取完整的图像,以便在应用程序中显示它们 我已经阅读了关于最初使用ACTION\u OPEN\u文档、授予适当的URI权限,然后在解析器上使用takePersistableUriPermission的各种帖子和文档 所有这些都很有效。问题是,世界上有很多管理媒体选择的

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

我已经阅读了关于最初使用ACTION\u OPEN\u文档、授予适当的URI权限,然后在解析器上使用takePersistableUriPermission的各种帖子和文档

所有这些都很有效。问题是,世界上有很多管理媒体选择的应用程序不支持ACTION\u OPEN\u DOCUMENT,但支持ACTION\u GET\u内容

我想做的是:

提供应用程序列表,允许用户选择已加载的应用程序,这些应用程序可以为他们查找要在我的应用程序中使用的媒体。 使用所选应用程序选择媒体。 将该媒体的URI持久化到数据库中,以便以后可以使用它。 当选择用于查找媒体的应用程序的初始意图是ACTION_OPEN_DOCUMENT时,这一点非常有效

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

对于不支持操作\u打开\u文档意图的应用程序,我如何弥补需要持久URI的差距?

如果要使用操作\u获取\u内容:

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

步骤2:持久化指向数据副本的Uri

换句话说,不能保证您从ACTION\u get\u内容返回的Uri在五分钟内就有用,更不用说五小时、五天、五周等等了


或者,集成一个文件系统并将自己限制在文件系统上可见的文件中。

谢谢Mark-我熟悉本地文件系统解决方案。我在寻找一种方法,支持用户浏览文件,使用各种基于云的存储库中的源创建播放列表,然后仅在他们真正想要查看/播放/收听时下载。如果要在重新启动期间保持访问,那么所有内容都必须是文件系统的本地内容,这种想法似乎很奇怪。这就是为什么我认为我错过了一些东西…我应该说-然后只下载它们意味着流到播放设备。其想法是永远不要在本地存储实际的文件——只存储URI。这样,我就可以支持存储空间非常小的设备,但对于那些想要定义重要播放列表的人来说。为什么要在本地复制spotify上的存储?为什么不使用dropbox帐户Id在那里搜索图像,根据URI的定义将播放列表存储到实际文件中?@tfrysinger:您需要查看这些服务的专用SDK,看看它们是否支持某种媒体搜索选项,该选项返回您可以保留的标识符,以支持以后的媒体播放。Android SDK没有类似的东西,ACTION_OPEN_文档是最接近的东西。是的,这是我开始走的路线,我第一次为dropbox实现了一个自定义文档提供程序,但是,当有这么多优秀的选择者时,人们已经有了一个他们已经喜欢使用的特别的选择,这看起来就像是重复了很多工作。有一次,我开始在这个应用程序中添加媒体库功能,然后我想——等一下,既然已经有这么多好的应用程序可用,而且可能已经在使用,为什么还要这么做?