【发布时间】:2018-05-06 01:40:28
【问题描述】:
您好需要知道如何识别设备存储中的音频文件,问题如下:
我正在开发一个音乐播放器,并将一些播放数据存储在数据库中,这些数据分别附加到每个音频文件,应用程序会不时检查用户音频库(在 SD 卡或内部存储器上)中的更改并插入数据库中的新歌曲(如果有),问题是我无法识别数据库是否已经存在,因为我无法获得通用标识符,我尝试使用存储中的音乐路径,但在某些情况下音乐名称有禁止我在 sqlite 中使用的字符,所以问题是:
如何识别音频文件?
EDIT1:
我认为我的问题不是很清楚,我想要的是一种单独识别每个音频文件的方法,例如使用文件的某些元数据,这些元数据是独一无二的,不能重复,例如文件的创建日期以毫秒为单位,或每个文件独有的任何其他元数据,如指纹。
我正在测试一个我认为不是理想的解决方案,我采用文件的路径并使用 Base64 类对其进行编码:
String path = "/storage/emulated/0/Download/Disturbed-万拳.mp3";
Base64.encodeToString(path.getBytes(), Base64.DEFAULT);'
结果是:L3N0b3JhZ2UvZW11bGF0ZWQvMC9Eb3dubG9hZC9EaXN0dXJiZWQtVGVuIFRob3VzYW5kIEZpc3Rz lm1wMw
大小因路径而异,但 String 仅获取数据库中接受的字母和数字,并且每个路径的结果始终相同。你怎么看?
【问题讨论】:
-
您的解决方案基本上与仅使用文件的确切名称相同(“Disturbed-The Thoushand Fists.mp3”)。在这种情况下,散列它不会给你带来任何好处。也许你应该考虑散列音频文件的元数据?或者,可能是它的一些内容?
-
使用 BASE64 删除了所有禁止的字符,使字符串只剩下字母和数字。我想要的是一种使用任何无法更改、删除或重复的信息来识别每个文件的方法,因为我会生成与每个文件相关联的播放统计信息,并且如果用户使用标签编辑器或更改,我不希望它们丢失内存中的文件名。我还需要一个唯一的 id 以避免在数据库中插入重复的音乐,因为没有唯一的 id 我无法验证是否已经在数据库中获取了文件。
标签: java android sqlite audio media