使用元数据来唯一标识文件

时间:2018-05-06 01:40:29

标签: java android sqlite audio media

你好需要知道如何识别设备存储中的音频文件,问题如下:

我正在开发一个音乐播放器并将一些播放数据存储在数据库中,这些数据分别附加到每个音频文件,应用程序不时会检查用户音频库(在SD卡或内部存储器上)的更改并插入数据库中的新歌(如果有的话),问题是我无法识别数据库是否已经存在因为我无法获得通用标识符,我试图在存储中使用音乐路径但在某些情况下音乐名称已经存在被禁止的字符阻止我在sqlite中使用所以问题是:

如何识别音频文件?

EDIT1:

我认为我的问题不是很清楚,我想要的是一种单独识别每个音频文件的方法,例如使用该文件的一些独特的元数据并且无法重复,例如文件的创建日期以毫秒为单位,或每个文件唯一的任何其他元数据,如指纹。

我正在测试一个我发现不是理想的解决方案,我采用文件的路径并使用Base64类对其进行编码:

String path =“/ storage / emulated / 0 / Download / Disturbed-Ten Thousand Fists.mp3”;

Base64.encodeToString(path.getBytes(),Base64.DEFAULT);'

结果是:L3N0b3JhZ2UvZW11bGF0ZWQvMC9Eb3dubG9hZC9EaXN0dXJiZWQtVGVuIFRob3VzYW5kIEZpc3Rz     Lm1wMw

大小因路径而异,但String只获取数据库中接受的字母和数字,并且每个路径的结果始终相同。你叮叮当当的是什么?

3 个答案:

答案 0 :(得分:1)

扩展程序可以识别音频文件。可以在Wikipedia Audio_file_format

上找到所使用格式的列表(不完整)

您最好的选择可能是检查文件扩展名并列出与音频相关的已知扩展类型。

但是,这不包括带有音频和没有视频的MP4文件等情况。

答案 1 :(得分:1)

您必须在文件类型框架中单击所有文件格式,然后选择audio格式的插入文件,例如mp3,真实,wmp

答案 2 :(得分:1)

出于此目的,我假设您已经有一个变量,无论是硬编码还是循环/列表,这是您要检查的File对象。

File audioFile;
//this is just for readability, do not write in your code as this should be replaced with the variable you have which is storing the audio file File.
String name = audioFile.getName();
//This is where you can do your logic. The name also returns the extension of the file so you can make sure your music player can handle the file extension, and also check the characters in the name
//Here is an example of detecting the ' character
if(name.contains("'")){
    //do something
}

如果您还有其他问题,请与我们联系!