当前位置: 首页 > 知识库问答 >
问题:

将媒体文件路径或URI保存到SQLite并获取它,最佳做法

蔚和风
2023-03-14

我的目标是:

    null

这与其他非常流行的应用程序非常相似--它们在“图片”文件夹中创建目录,并将照片存储在其中,然后在应用程序中使用它们,同时它们也可以通过图库/文件资源管理器等进行查看。

据我所知,保存媒体内容的推荐方法(图片)就是使用mediaStoreAPI,结果我得到了内容URI,以后可以使用它。但后来我读到这些内容URI可能会在重新扫描媒体发生后更改,所以看起来不太可靠。(例如使用SD卡,取出后再插入)

同时,不推荐使用绝对文件路径,并且倾向于不推荐使用绝对文件路径来处理外部存储的API。所以看起来也不靠谱。

我只能设想如下解决方案:

  • 保存时使用唯一的自动生成的文件名(如UUID)。
  • 当我需要获取内容URI时(例如,希望在ImageView中呈现照片)-我可以使用ContentResolver并使用文件名筛选器搜索内容URI。

这种方法的一个问题是,我有很多照片(图库),并且使用ContentResolver查询它会显著影响性能。

我觉得我已经把事情复杂化了,错过了什么。

共有1个答案

施永宁
2023-03-14

你确实把事情搞得太复杂了。将文件存储到文件系统中所需的文件夹中(最好将该文件夹命名为您的应用程序名称)

存储此路径或URI路径--无论您喜欢什么。(不要在应用程序中硬编码传递-设备供应商可能在他们的设备中有不同的基本路径)

只要文件夹的名称相同,并且文件的名称相同(与数据库中的名称相同)--即使sdcard被取出然后放回,您也能够访问它们。

重新索引后可能会出现复杂的情况--但在我作为Android开发人员工作的八年中,我只遇到过一次,因此您可以很容易地忽略这些东西。

如果你想要对你存储的东西有更多的控制权,并且想要限制对它的访问--把数据存储到你应用程序的内部存储中--这样你就能百分之百地确定数据在哪里,而且它没有被篡改。

从Android10开始,您就拥有了范围存储--它就像是内部存储,但也可能是在外部SDCard上。

以下是可能的存储位置的一个小概述。

不要想得太多--这是手机的默认用法,它的工作就像你所期望的一样--相当好,相当稳定。

 类似资料:
  • 问题内容: 如何保存/加载类所在的文件?我之前没有该位置的物理路径,而是想动态地找到该文件。 我想加载一个XML文件并对其进行读写,但我不确定该如何解决。 问题答案: 在一般情况下,您不能。从类加载器加载的资源可以是任何东西:目录中的文件,嵌入jar文件中的文件,甚至可以通过网络下载。

  • 当我从图库中选择一个图像时,我可以获得该图像的Uri,如下所示: 上面检索到的Uri的格式是content://media/external/images/media/7266 但是,当我试图获取刚保存为文件的图像的Uri时,无法以这种格式检索Uri: 从上面的代码获得的Uri是/storage/emulated/0/dcim/camera/02-04-16 12-49-16.png 我相信,这不

  • 我想从URI中获得完整的文件路径。URI不是图像,而是音乐文件,但如果我像纵隔解决方案那样做,如果应用程序用户选择eg Astro作为浏览器,而不是音乐播放器,它就不会工作。我怎么解决这个?

  • 在我的应用程序中,我让用户注册/登录他们的社交媒体帐户,即。领英、谷歌和脸书。 我的问题是,一旦我获得了用户的个人资料图片网址,我应该在我的系统中保存图像,还是允许我简单地保存网址,让图像从用户的社交媒体帐户中提供?我甚至不确定我是否被允许保存这张照片,因为从技术上来说,它可能是领英、谷歌或脸书的财产。

  • 我有一个带有文件输入字段的表单: 然后我做的东西与此图像文件提交: 我要保存图像的目录名为,与上面的目录相同。 您可能会注意到,在上面我在类insertBlog`的代码是: 当用户填写表单时,除了图像信息之外,它还将所有其他信息正确地存储在MySQL表中。此外,它不会将实际图像存储在文件夹中。那么,如何让这个脚本将图像上传到文件夹,并将其路径存储在mysql表中呢。目前,它没有将图像存储在数据库中

  • 我刚刚开始android开发,对于如何将媒体文件保存到外部存储的自定义文件夹非常困惑。我读过关于内窥镜存储,纵隔,但我还是不明白。 我正在尝试将文件保存到外部存储中自己的文件夹中(就像外部存储中的Whatsapp文件夹一样)。我希望结构是这样的: 我不希望媒体文件存储在默认媒体目录(如Pictures/或DCIM/)中。我有些问题: 要用哪一个?作用域存储或纵隔API? 如何实现上述操作? 其他信