首页 > 解决方案 > 在 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 方法加载专辑封面。但我想更改专辑封面,但没有找到任何方法。请帮忙。

提前致谢。

标签: androidmediastoreandroid-10.0

解决方案


content://media/external/audio/albumart 的东西只是工作,但它确实是一个肮脏的黑客。

也许谷歌只是不希望你从最底层更改它,所以他们弃用了该列并禁止我们访问相应的数据库部分。

我认为更改嵌入式专辑封面将是要做的事情(但令人讨厌)


推荐阅读