android - 在 Android Q 上更改专辑封面

标签 android mediastore android-10.0

该应用提供了使用以下方法更改专辑封面的功能:

                        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 东西可以正常工作,但它确实是一个肮脏的 hack。

也许 google 只是不想让您从最底层开始更改它,所以他们弃用了该列并禁止我们访问相应的数据库部分。

我认为改变嵌入的专辑封面是可行的(但很讨厌)

关于android - 在 Android Q 上更改专辑封面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58889676/

相关文章:

Android Eclipse 查询库外图片的缩略图

android - CallScreeningService - 几秒钟后断开调用 - Android 10

android - Build.GetSerial() 在 API 29 上返回未知数

android - 项目刷新失败错误 :exception during working with external system: - Android Studio 2. 1 预览

android - Firebase Storage 生成的 URL 不允许访问该文件

android: cancel(true) 不会终止 AsyncTask

android - MediaRecorder Android 11 启动失败-1004

java - MediaStore.Images.Media.insertImage 在某些设备中返回 null

android - 透明背景 imageview 使它上面通常不透明的文本也变得透明。我该如何解决?

android - 下载管理器不适用于 Android 10 (Q)