我是否需要存储我的文件的路径,或者我可以简单地记下它们的存储类型吗?

Do I need to store paths to my files or can I simply note their storage type?

我做了一些测试,并使用 Android 模拟器输出了一些路径:

内部存储 context.getFilesDir() 具有路径 /data/data/package_name/files

具有 context.getExternalFilesDir(null) 的私有外部存储具有路径 /storage/emulated/0/Android/data/packagename/files/

Public 具有 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) 的外部存储具有路径 /storage/emulated/0/Pictures/

在我的应用程序中,我定义了一个对象,该对象具有时间戳字符串和图像数组(更具体地说,这些图像的路径),并且此信息存储在 sqlite 数据库中。

但这是个坏主意吗?因为如果有人想将此应用程序移动到另一台设备,路径不会改变吗?我对如何移动文件、不同的设备如何影响这种情况等感到有点困惑。我对在 sqlite table 中存储图像引用的正确方法感到困惑。你像上面那样存储绝对路径吗?或者你是否存储一个数字来表示图片是否是 internal/private external/public 外部的并且不管 device/file 结构如何都以这种方式拉?

我只是想确保我不会仅仅因为我误解了某些东西而发布了缺少某些关键功能的应用程序。就像我开始使用可以在内部使用 pictures/store 它们的应用程序一样,它都在内部存储上,都在这个 phone 上。但是如果我想开始将图片保存到 SD 卡或其他东西,我必须更改存储图片的位置以及引用它们的方式。如果我升级 phone 会怎样?我不得不以某种方式 carry/transfer 所有这些东西到一个新的基础设施等。或者 "cloud",甚至

换句话说,我只是想了解所有可能的用例,在这里,就 Android 应用程序数据的存储和传输方式而言。

你的问题有点笼统。我会尽量轮流回答:

But is this a bad idea?

本身不是。这里的问题是您如何管理更改以及将来可能发生的 Android 更改(以及您当前支持的版本)

Because if someone wanted to move this app to another device, wouldn't the paths change?

相对路径永远不会改变。它们的实施(我猜测大约 API 2~6)是为了确保在应用程序中不需要硬盘管理。通过获取 Enviroment.getExternalFilesDir(stuffs..),无论 readl 磁盘分配如何,您都可以保证同一文件的路径。

how files can be moved around, how different devices impact this situation, etc.

来自桌面(PC、Mac、Linux、Ubuntu 等)的文件遵循与模拟相同磁盘系统的 Android 设备的约定。这样,PC 可以将文件(png、mp3、自定义等)保存在 "root folder" 中,该文件成为 Enviroment.getExternalFilesDir(stuffs..) 的同一根目录,但您的应用程序的私有数据永远无法访问(在非根目录下设备),到外部系统。

Do you store absolute paths like above?

可以。但我认为这违背了系统最佳实践。保存相对路径,然后构建一个 File 对象,关于该路径是正确的方法。请注意,Android 中的 File class 希望您对所引用的文件有所了解....无论是其扩展名、名称正则表达式、物理位置、关系位置等...你至少需要知道其中之一。

最后,我想你问的是:

Can the user replicate the same content in different devices?

为此,您必须确保用户是 "know",例如,使用 Play 商店帐户,您可以拥有一个存储库,并让设备与该存储库同步。或者甚至添加一个 "export" 功能,复制文件,并将它们导入其他地方。