始终查询专辑封面 returns 没有内容条目://media/external/audio/albumart/31726
Querying for album art always returns No entry for content://media/external/audio/albumart/31726
所以我已经尝试了一段时间了。要获取 mp3 文件的专辑封面并将其显示在其各自的 ImageView 上,我正在使用 uri("content://media/external/audio/albumart")
这是我获取专辑封面的方法
public Bitmap getAlbumArt(long idAlbum){
Bitmap bitmap = null;
try{
final Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
Uri uri = ContentUris.withAppendedId(sArtworkUri, idAlbum);
ParcelFileDescriptor parcelFileDescriptor = getContext().getContentResolver().openFileDescriptor(uri,"r");
if (parcelFileDescriptor != null){
FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
bitmap = BitmapFactory.decodeFileDescriptor(fileDescriptor);
}
}catch (Exception e){
e.printStackTrace();
}
return bitmap;
}
而且这个方法总是returns
java.io.FileNotFoundException: No entry for content://media/external/audio/albumart/31726
其中 31726 是专辑 ID。
由于我捕获了这个异常,并且如果它 returns 为 null,我将其设置为默认专辑封面,因此每个 mp3 都将其 ImageView 设置为默认专辑封面。我正在使用我的 Samsung Galaxy s3 运行 应用程序和我的设备 运行s android 4.2.2 JellyBean。请有人帮助我解决这个问题。
这是我请求专辑 ID 的方式
Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String[] columns = {
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Albums._ID,
MediaStore.Audio.Media.DATA
};
String where = MediaStore.Audio.Media.IS_MUSIC + "=1";
Cursor musicCursor = usicResolver.query(musicUri,columns,where,null, null);
然后在条件为
的 if 循环中
if(musicCursor.moveToFirst()){
int albumId = musicCursor.getColumnIndex
(MediaStore.Audio.Albums._ID);
do{
long idAlbum = musicCursor.getLong(albumId);
//Then i send it to my above method getAlbumArt
Bitmap songAlbumArt = getAlbumArt(idAlbum);
}while(musicCursor.moveToNext());
}
这是我从专辑 ID 查询封面艺术路径的方式:
private static String getCoverArtPath(long albumId, Context context) {
Cursor albumCursor = context.getContentResolver().query(
MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
new String[]{MediaStore.Audio.Albums.ALBUM_ART},
MediaStore.Audio.Albums._ID + " = ?",
new String[]{Long.toString(albumId)},
null
);
boolean queryResult = albumCursor.moveToFirst();
String result = null;
if (queryResult) {
result = albumCursor.getString(0);
}
albumCursor.close();
return result;
}
您可以使用上述方法返回的路径从 BitmapFactory 获取位图:
BitmapFactory.decodeFile(coverArtPath);
ImageLoader.getInstance().
displayImage( ContentUris.withAppendedId(Uri.parse("content://media/external/audio/albumart"), song_tag.albumId).toString(),
image,
new DisplayImageOptions.Builder().cacheInMemory(true).showImageOnFail(R.drawable.stock6).resetViewBeforeLoading(true).build());
image是ImageView的对象
song_tag.albumid 是您必须发送以获取图像的相册 ID
stock6 是默认图片
所以我已经尝试了一段时间了。要获取 mp3 文件的专辑封面并将其显示在其各自的 ImageView 上,我正在使用 uri("content://media/external/audio/albumart")
这是我获取专辑封面的方法
public Bitmap getAlbumArt(long idAlbum){
Bitmap bitmap = null;
try{
final Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
Uri uri = ContentUris.withAppendedId(sArtworkUri, idAlbum);
ParcelFileDescriptor parcelFileDescriptor = getContext().getContentResolver().openFileDescriptor(uri,"r");
if (parcelFileDescriptor != null){
FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
bitmap = BitmapFactory.decodeFileDescriptor(fileDescriptor);
}
}catch (Exception e){
e.printStackTrace();
}
return bitmap;
}
而且这个方法总是returns
java.io.FileNotFoundException: No entry for content://media/external/audio/albumart/31726
其中 31726 是专辑 ID。
由于我捕获了这个异常,并且如果它 returns 为 null,我将其设置为默认专辑封面,因此每个 mp3 都将其 ImageView 设置为默认专辑封面。我正在使用我的 Samsung Galaxy s3 运行 应用程序和我的设备 运行s android 4.2.2 JellyBean。请有人帮助我解决这个问题。
这是我请求专辑 ID 的方式
Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String[] columns = {
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Albums._ID,
MediaStore.Audio.Media.DATA
};
String where = MediaStore.Audio.Media.IS_MUSIC + "=1";
Cursor musicCursor = usicResolver.query(musicUri,columns,where,null, null);
然后在条件为
的 if 循环中 if(musicCursor.moveToFirst()){
int albumId = musicCursor.getColumnIndex
(MediaStore.Audio.Albums._ID);
do{
long idAlbum = musicCursor.getLong(albumId);
//Then i send it to my above method getAlbumArt
Bitmap songAlbumArt = getAlbumArt(idAlbum);
}while(musicCursor.moveToNext());
}
这是我从专辑 ID 查询封面艺术路径的方式:
private static String getCoverArtPath(long albumId, Context context) {
Cursor albumCursor = context.getContentResolver().query(
MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
new String[]{MediaStore.Audio.Albums.ALBUM_ART},
MediaStore.Audio.Albums._ID + " = ?",
new String[]{Long.toString(albumId)},
null
);
boolean queryResult = albumCursor.moveToFirst();
String result = null;
if (queryResult) {
result = albumCursor.getString(0);
}
albumCursor.close();
return result;
}
您可以使用上述方法返回的路径从 BitmapFactory 获取位图:
BitmapFactory.decodeFile(coverArtPath);
ImageLoader.getInstance().
displayImage( ContentUris.withAppendedId(Uri.parse("content://media/external/audio/albumart"), song_tag.albumId).toString(),
image,
new DisplayImageOptions.Builder().cacheInMemory(true).showImageOnFail(R.drawable.stock6).resetViewBeforeLoading(true).build());
image是ImageView的对象
song_tag.albumid 是您必须发送以获取图像的相册 ID
stock6 是默认图片