android 下使用Cursor如何获得专辑图片?

android 下使用Cursor如何获得专辑图片?,第1张

android下使用cursor获取专辑图片,主要是在数据库里面先保存专辑图片的url地址,当使用cursor游标遍历数据库数据的时候,使用资源 *** 作类进行加载相应的url,如下代码:

Cursor cursor = context.getContentResolver().query(Media.EXTERNAL_CONTENT_URI, columns, null, null, null)

Log.e("cursor" , (cursor==null) + "")

while(cursor.moveToNext()) {

// 查找封面图片

long albumId = cursor.getLong(5)

// 读取专辑图片

String album_uri = "content://media/external/audio/albumart"// 专辑Uri对应的字符串

Uri albumUri = ContentUris.withAppendedId(Uri.parse(album_uri), albumId)

// 取图片 ==>得到一个输入流

Bitmap coverPhoto = null

try {

InputStream is = context.getContentResolver().openInputStream(albumUri)

if(null != is) {

coverPhoto = BitmapFactory.decodeStream(is)

}

} catch (Exception e) {

e.printStackTrace()

}

data.add(new Audio(cursor.getLong(0), cursor.getString(1) , cursor.getString(2) , cursor.getLong(3) , cursor.getString(4) , albumId , coverPhoto))

}

cursor.close()

这是抽取专辑图片的方法,扫描歌曲的时候自己把歌曲的id和专辑的id传进去就能获取

private static final Uri sArtworkUri = Uri

.parse("content://media/external/audio/albumart")

/**

* 将MP3里图片读取出来

*

* @param context

* @param songid

* @param albumid

* @return

*/

public static Bitmap getMusicBitemp(Context context, long songid,

long albumid) {

Bitmap bm = null

// 专辑id和歌曲id小于0说明没有专辑、歌曲,并抛出异常

if (albumid <0 &&songid <0) {

throw new IllegalArgumentException(

"Must specify an album or a song id")

}

try {

if (albumid <0) {

Uri uri = Uri.parse("content://media/external/audio/media/"

+ songid + "/albumart")

ParcelFileDescriptor pfd = context.getContentResolver()

.openFileDescriptor(uri, "r")

if (pfd != null) {

FileDescriptor fd = pfd.getFileDescriptor()

bm = BitmapFactory.decodeFileDescriptor(fd)

}

} else {

Uri uri = ContentUris.withAppendedId(sArtworkUri, albumid)

ParcelFileDescriptor pfd = context.getContentResolver()

.openFileDescriptor(uri, "r")

if (pfd != null) {

FileDescriptor fd = pfd.getFileDescriptor()

bm = BitmapFactory.decodeFileDescriptor(fd)

} else {

return null

}

}

} catch (FileNotFoundException ex) {

}

return bm

}

另一种:

// 查找sdcard卡上的所有歌曲信息

public List>getMultiData() {

ArrayList>musicList = new ArrayList>()

// 加入封装音乐信息的代码

// 查询所有歌曲

ContentResolver musicResolver = this.getContentResolver()

Cursor musicCursor = musicResolver.query(

MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,

null)

int musicColumnIndex

if (null != musicCursor &&musicCursor.getCount() >0) {

for (musicCursor.moveToFirst()!musicCursor.isAfterLast()musicCursor

.moveToNext()) {

Map musicDataMap = new HashMap()

Random random = new Random()

int musicRating = Math.abs(random.nextInt()) % 10

musicDataMap.put("musicRating", musicRating)

// 取得音乐播放路径

musicColumnIndex = musicCursor

.getColumnIndex(MediaStore.Audio.AudioColumns.DATA)

musicPath = musicCursor.getString(musicColumnIndex)

musicDataMap.put("musicPath", musicPath)

// 取得音乐的名字

musicColumnIndex = musicCursor

.getColumnIndex(MediaStore.Audio.AudioColumns.TITLE)

musicName = musicCursor.getString(musicColumnIndex)

musicDataMap.put("musicName", musicName)

// 取得音乐的专辑名称

musicColumnIndex = musicCursor

.getColumnIndex(MediaStore.Audio.AudioColumns.ALBUM)

musicAlbum = musicCursor.getString(musicColumnIndex)

musicDataMap.put("musicAlbum", musicAlbum)

// 取得音乐的演唱者

musicColumnIndex = musicCursor

.getColumnIndex(MediaStore.Audio.AudioColumns.ARTIST)

musicArtist = musicCursor.getString(musicColumnIndex)

musicDataMap.put("musicArtist", musicArtist)

// 取得歌曲对应的专辑对应的Key

musicColumnIndex = musicCursor

.getColumnIndex(MediaStore.Audio.AudioColumns.ALBUM_KEY)

musicAlbumKey = musicCursor.getString(musicColumnIndex)

String[] argArr = { musicAlbumKey }

ContentResolver albumResolver = this.getContentResolver()

Cursor albumCursor = albumResolver.query(

MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, null,

MediaStore.Audio.AudioColumns.ALBUM_KEY + " = ?",

argArr, null)

if (null != albumCursor &&albumCursor.getCount() >0) {

albumCursor.moveToFirst()

int albumArtIndex = albumCursor

.getColumnIndex(MediaStore.Audio.AlbumColumns.ALBUM_ART)

musicAlbumArtPath = albumCursor.getString(albumArtIndex)

if (null != musicAlbumArtPath

&&!"".equals(musicAlbumArtPath)) {

musicDataMap.put("musicAlbumImage", musicAlbumArtPath)

} else {

musicDataMap.put("musicAlbumImage",

"file:///mnt/sdcard/alb.jpg")

}

} else {

// 没有专辑定义,给默认图片

musicDataMap.put("musicAlbumImage",

"file:///mnt/sdcard/alb.jpg")

}

musicList.add(musicDataMap)

}

}

return musicList

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9392689.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存