将元数据标签(如标题、艺术家、专辑)添加到音频文件不起作用(Android MediaStore)
Posted
技术标签:
【中文标题】将元数据标签(如标题、艺术家、专辑)添加到音频文件不起作用(Android MediaStore)【英文标题】:Adding metadata tags (like title, artist, album) to audio file not working (Android MediaStore) 【发布时间】:2021-12-04 07:06:41 【问题描述】:我想创建一个音频文件并使用 android MediaStore 设置歌曲的标题、艺术家和专辑标签。创建文件有效,但不幸的是标签似乎没有设置。我做错了什么?
我的代码:
private long createFile(Context context, String fileName, InputStream fileContent) throws IOException
Uri audioCollection = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.Audio.Media.DISPLAY_NAME, fileName);
contentValues.put(MediaStore.Audio.Media.TITLE, "some title");
contentValues.put(MediaStore.Audio.Media.ARTIST, "some artist");
contentValues.put(MediaStore.Audio.Media.ALBUM, "some album");
contentValues.put(MediaStore.Audio.Media.MIME_TYPE, "audio/mpeg");
ContentResolver contentResolver = context.getContentResolver();
Uri uri = contentResolver.insert(audioCollection, contentValues);
FileOutputStream out = (FileOutputStream) contentResolver.openOutputStream(uri);
FileChannel outChannel = out.getChannel();
ReadableByteChannel inChannel = Channels.newChannel(fileContent);
outChannel.transferFrom(inChannel, 0, Long.MAX_VALUE);
out.close();
long id = Long.parseLong(uri.getLastPathSegment());
return id;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
AsyncTask.execute(() ->
Log.e(LOG_TAG, "STARTED");
try
String songUrl = "https://file-examples-com.github.io/uploads/2017/11/file_example_MP3_700KB.mp3";
InputStream in = new URL(songUrl).openStream();
long id = createFile(getApplicationContext(), "songname", in);
Log.e(LOG_TAG, "CREATED FILE WITH ID " + id);
catch (IOException e)
Log.e(LOG_TAG, "ERROR: " + e.getMessage());
);
【问题讨论】:
什么意思?我需要 ContentResolver 对象来插入或更新 ContentValues。我正在尝试设置歌曲标题、艺术家和专辑(ID3 标签),以便我的媒体播放器应用程序正确显示它(目前它只显示文件名)。 啊,我明白了,谢谢。我更新了我的帖子。 Android 从作为轨道一部分的相应 ID3 标签中获取值。我使用诸如 jaudiotagger 和 jid3 之类的库来编辑和更新 mp3 标签,但是这些库已经过时并且不再适用于 android 10 + (因为它们的文件 io)。我还没有找到合适的东西 由于似乎无法使用 MediaStore 设置元数据,我最终自己编写了一个标签编辑器(仅限 ID3v1)。看看我发布的答案,它应该适用于每个 android 版本。 【参考方案1】:据我所知,目前无法使用 MediaStore 设置 ID3 标签,它只会将标签保存在设备本地,因此将文件移动到另一个设备时会丢失元数据。
所以最后我创建了自己的标签编辑器(用于 ID3v1)。有兴趣的源码:https://github.com/nh7dev/ID3v1TagEditorJava
ID3v2 更复杂:https://id3.org/id3v2.3.0
【讨论】:
@nh,我很感兴趣,但麻烦在于需要明确权限的 android10+。 Jid3 和 jauiotagger 不包含 SAF 框架,是吗? 抱歉,我不知道我从未使用过 SAF 框架。如果您可以获得具有读写权限的 File 或 FileChannel 实例,它应该可以工作以上是关于将元数据标签(如标题、艺术家、专辑)添加到音频文件不起作用(Android MediaStore)的主要内容,如果未能解决你的问题,请参考以下文章