向音频文件添加元数据标签(如标题、艺术家、专辑)无效(Android MediaStore)
Adding metadata tags (like title, artist, album) to audio file not working (Android MediaStore)
我想创建一个音频文件并使用 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());
}
});
}
据我所知,现在无法使用 MediaStore 设置 ID3 标签,它只会将标签保存在设备本地,因此在将文件移动到另一台设备时元数据会丢失。
所以最后我创建了自己的标签编辑器(用于 ID3v1)。源代码,如果有人感兴趣:https://github.com/nh7dev/ID3v1TagEditorJava
ID3v2 更复杂:https://id3.org/id3v2.3.0
有趣 - 为什么你不使用 mp3tag f.e?
我正在寻找通过 android 上的自定义标签找到我的音乐的可能性。
foobar mobile 会很好。
在 hydrogenaudio 上我收到了答案,android 根本不会索引它们。
也许您有一个有用的想法 ;-)
我想创建一个音频文件并使用 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());
}
});
}
据我所知,现在无法使用 MediaStore 设置 ID3 标签,它只会将标签保存在设备本地,因此在将文件移动到另一台设备时元数据会丢失。
所以最后我创建了自己的标签编辑器(用于 ID3v1)。源代码,如果有人感兴趣:https://github.com/nh7dev/ID3v1TagEditorJava
ID3v2 更复杂:https://id3.org/id3v2.3.0
有趣 - 为什么你不使用 mp3tag f.e?
我正在寻找通过 android 上的自定义标签找到我的音乐的可能性。 foobar mobile 会很好。
在 hydrogenaudio 上我收到了答案,android 根本不会索引它们。 也许您有一个有用的想法 ;-)