java - 更改 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)
解决方案
推荐阅读
- google-maps - 为什么我的自定义 Google 地图不再起作用?
- javascript - 当前 div 的 LocalStorage?
- ssis - ssis 中 ODBC 连接的更新表
- excel - 如何修复主键中的重复值?
- xcode - 当我将反应原生 iOS 应用程序上传到 App Store Connect 时,我得到了空版本
- swift - Swift:Twilio 发送短信,需要“收件人”电话号码
- google-bigquery - Airflow 如何将 API 请求结果写入 BigQuery 表或 GCS 文件
- c - C - 打印 ref 传递的成员链表
- c# - 如何将 C# 类对象转换为 json?
- python - 使用 Scrapy 和 Splash 在动态 JavaScript 网页中抓取图像