首页 > 解决方案 > 更改 Android R 音乐专辑封面

问题描述

我正在开发一个需要更改歌曲元数据的应用程序。我正在使用 jaudiotagger 库。我可以毫无问题地更改所有字段,除了封面图片,它甚至会更改,但仅在文件中,我无法让 android MediaStore 显示新专辑封面。

最奇怪的是,在模拟器上它可以工作(Android R)(我什至不需要我在本文中发布的最后一段代码就可以让它工作),但在我的设备上却不行(Android R,小米红米 Note 10)

有没有人有任何想法可以帮助我?

这是我用来更改字段的代码

val af = AudioFileIO.read(songFile)
val tag = af.tag

tag.setField(FieldKey.TITLE, "title test")
tag.setField(FieldKey.ARTIST, "artist test")
tag.setField(FieldKey.ALBUM, "album test")

tag.deleteArtworkField()

val stream = ByteArrayOutputStream()
resource.compress(Bitmap.CompressFormat.PNG, 100, stream)
val byteArray: ByteArray = stream.toByteArray()

tag.deleteArtworkField()

val artwork = Artwork.createArtworkFromFile(songFile)
artwork.binaryData = byteArray
tag.setField(artwork)

af.tag = tag
AudioFileIO.write(af)

//I use this code to update the MediaStore, update all fields except the album image
MediaScannerConnection.scanFile(applicationContext, arrayOf(songFile.path), null, null)

如果我像这样加载专辑封面,它会显示新图像:

val f = AudioFileIO.read(songFile)
val tag = f.tag
Glide.with(applicationContext).load(tag.firstArtwork.binaryData).into(imageView)

如果我以这两种方式加载封面图片,它们会显示旧封面

//First method 
val trackUri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, audioId)
val bm = contentResolver.loadThumbnail(trackUri, Size(1000, 1000), null)
Glide.with(this).load(bm).into(imageView)

//Second method 
val albumArtUri = ContentUris.withAppendedId(Uri.parse("content://media/external/audio/albumart"), albumId)
Glide.with(this).load(albumArtUri).into(imageView)

我尝试使用此代码更新 MediaStore,但它也不起作用。

val newAlbumArt= File("/storage/emulated/0/img1.jpg")

val artworkUri = Uri.parse("content://media/external/audio/albumart")
val del = contentResolver.delete(ContentUris.withAppendedId(artworkUri, albumId), null, null)
contentResolver.notifyChange(artworkUri, null)

val values = ContentValues()
values.put("album_id", albumId)
values.put("_data", newAlbumArt.path)
val uri = contentResolver.insert(artworkUri, values)
contentResolver.notifyChange(artworkUri, null)

标签: javaandroidaudiometadatamediastore

解决方案


推荐阅读