android - 在 Android Q 上更改专辑封面
问题描述
该应用程序提供了使用以下方法更改专辑的专辑封面的能力:
Uri albumArtUri = Uri.parse("content://media/external/audio/albumart");
Uri idAlbumArtUdi = ContentUris.withAppendedId(albumArtUri, albumId);
{
// First set _data to null
ContentValues values = new ContentValues();
values.putNull("_data");
final String selection = "album_id=?";
final String[] selectionArgs = new String[]{String.valueOf(albumId)};
final int updatedCount = resolver.update(
idAlbumArtUdi,
values,
selection,
selectionArgs);
if (updatedCount == 0) {
ContentValues newValues = new ContentValues(values);
newValues.put("album_id", albumId);
Uri uri = resolver.insert(albumArtUri, newValues);
}
}
if (filepath != null) {
// then insert filepath into _data if it's notl null
ContentValues insertionValues = new ContentValues();
insertionValues.put("_data", filepath);
final String selection = "album_id=?";
final String[] selectionArgs = new String[] {String.valueOf(albumId)};
resolver.update(idAlbumArtUdi, insertionValues, selection, selectionArgs);
} else {
// It was a deletion so we don't insert anything here
}
resolver.notifyChange(idAlbumArtUdi, null);
它在 API 29 之前的所有 Android 版本上都能完美运行。在 SDK API 29 上,它会在以下代码行中引发 NullPointerException:
final int updatedCount = resolver.update(
idAlbumArtUdi,
values,
selection,
selectionArgs);
我知道 Android Q 有变化,应该使用 ContentResolver.loadThumbnail 方法加载专辑封面。但我想更改专辑封面,但没有找到任何方法。请帮忙。
提前致谢。
解决方案
content://media/external/audio/albumart 的东西只是工作,但它确实是一个肮脏的黑客。
也许谷歌只是不希望你从最底层更改它,所以他们弃用了该列并禁止我们访问相应的数据库部分。
我认为更改嵌入式专辑封面将是要做的事情(但令人讨厌)
推荐阅读
- c# - UWP 中的 MEF CompositionContainer
- c - C 格式 printf(%Lf) 结果错误
- javascript - 添加指向 typed.js 字符串的链接
- python - 如何从 Keras 中加载的模型构建编码器?
- php - 如何自定义 wordpress 主题,包括小部件?
- java - GraalVM:允许外部脚本访问本机编译对象
- magento-2.3 - 使用 Klarna Checkout 获得“401 未经授权”
- roles - 使用用户存储 SPI 更新 Keycloak 中的用户角色映射
- c - 使用 C 中的指针传递矩阵
- maven - 版本maven插件的意外更新行为