Android MediaStore中的_ID列有多独特?

Android MediaStore中的_ID列有多独特?,android,Android,我正在开发一个Android音乐播放器应用程序,它能够将音乐的播放列表集合保存到磁盘。不过我有一些问题,我已经在谷歌上搜索过了,但没有什么能让我满意 我发现的大多数教程/指南都使用_ID,据我所知,它有整数/长数据类型,以区分彼此之间的音乐文件。它有多独特 我所说的唯一性可以这样描述: 我发现_ID看起来像序列号。如果我添加/删除一首音乐,会发生什么情况?另一首音乐的ID会被更改吗? 将我的播放列表数据存储为音乐ID列表是否安全?播放列表是否会保留用户对磁盘上音乐文件的更改? 谢谢。\u ID是

我正在开发一个Android音乐播放器应用程序,它能够将音乐的播放列表集合保存到磁盘。不过我有一些问题,我已经在谷歌上搜索过了,但没有什么能让我满意

我发现的大多数教程/指南都使用_ID,据我所知,它有整数/长数据类型,以区分彼此之间的音乐文件。它有多独特

我所说的唯一性可以这样描述:

我发现_ID看起来像序列号。如果我添加/删除一首音乐,会发生什么情况?另一首音乐的ID会被更改吗? 将我的播放列表数据存储为音乐ID列表是否安全?播放列表是否会保留用户对磁盘上音乐文件的更改?
谢谢。

\u ID是唯一的。与数据库一样,ID通常是自动递增的。因此,如果添加了一个项目,它将使用先前添加的ID+1。因此,如果删除一个项目,数据库中的其他ID不会更改,因此会出现间隙=>无需担心


所以对于问题2,它是安全的。

\u ID是唯一的。与数据库一样,ID通常是自动递增的。因此,如果添加了一个项目,它将使用先前添加的ID+1。因此,如果删除一个项目,数据库中的其他ID不会更改,因此会出现间隙=>无需担心


因此,对于问题2,它是安全的。

虽然这是一个老问题,但上面的答案是不正确的。简单地删除或添加新音乐就可以了,因为Android会为其分配自动增量的_id。但是,当您只需移动一个文件(在您的案例中是一首歌曲)_id列就会改变值!就像MediaStore先删除条目,然后创建新条目一样


因此,对于第2点,当用户移动他们的歌曲时,这些ID可能会在一段时间内变得过时。

虽然这是一个老问题,但上面的答案是不正确的。简单地删除或添加新音乐就可以了,因为Android会为其分配自动增量的_id。但是,当您只需移动一个文件(在您的案例中是一首歌曲)_id列就会改变值!就像MediaStore先删除条目,然后创建新条目一样


因此,对于第2点,当用户移动歌曲时,这些ID可能会在一段时间内变得过时。

错了。移动的文件将被分配一个新的_id值。他们没有保留旧的ID。@black_stallion这有什么关系?@RvdK让我们假设OP创建了一个播放列表,其中包含一首ID为3599的歌曲,并将其存储在其应用程序的数据库中。后来有人在文件系统中移动歌曲。当同一个播放列表再次从他的DB中取出时,ID=3599可能根本不存在,即使它存在,也很可能是另一首歌。这是因为Android会更改MediaStore中已移动文件项的_ID值。显然,对于OP的第二个问题,他不能依靠_ID列来保证播放列表的正确性。这确实是因为,如果带有音乐的SD卡断开连接,所有歌曲都将具有新的ID,因此您的旧播放列表将不再有效,无法找到带有旧ID的歌曲。移动的文件将被分配一个新的_id值。他们没有保留旧的ID。@black_stallion这有什么关系?@RvdK让我们假设OP创建了一个播放列表,其中包含一首ID为3599的歌曲,并将其存储在其应用程序的数据库中。后来有人在文件系统中移动歌曲。当同一个播放列表再次从他的DB中取出时,ID=3599可能根本不存在,即使它存在,也很可能是另一首歌。这是因为Android会更改MediaStore中已移动文件项的_ID值。显然,对于OP的第二个问题,他不能依靠_ID列来保证播放列表的正确性。这确实是因为,如果带有音乐的SD卡断开连接,所有歌曲都将具有新的ID,因此您的旧播放列表将不再有效,无法找到带有旧ID的歌曲