在Android Q上更改专辑封面

时间:2019-11-16 10:19:14

标签: 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);

它可以在所有Android版本上完美运行,直到API 29。 在SDK API 29上,它在以下代码行中引发NullPointerException:

                          final int updatedCount = resolver.update(
                                    idAlbumArtUdi,
                                    values,
                                    selection,
                                    selectionArgs);

我知道Android Q有所变化,应该使用ContentResolver.loadThumbnail方法加载专辑封面。但是我想更改专辑封面,却没有找到任何方法。请帮忙。

谢谢。

1 个答案:

答案 0 :(得分:0)

content:// media / external / audio / albumart可以正常工作,但确实是一个肮脏的黑客。

也许Google只是不想让您从最底部进行更改,所以他们不赞成使用该列,并禁止我们访问相应的数据库部分。

我认为更改嵌入式专辑封面是一件要做的事(但现在很讨厌)