接着上一节修改音乐播放器3.0。

上一节到处的数据库中 audio 表,存储着歌曲信息;album_info 表,存储着封面信息

那么怎么让图片和歌曲对应起来?需要通过 audio 表中的​​album_key​​​找到​​album_info​​​中相等的​​album_key​​​以此来拿到​​album_art​​(封面图的存储路径)

Music类中增加

public String getAlbumKey() {
return albumKey;
}

public void setAlbumKey(String albumKey) {
this.albumKey = albumKey;
}

public String getAlbumArt() {
return albumArt;
}

public void setAlbumArt(String albumArt) {
this.albumArt = albumArt;
}

MediaStoreMusicDao 中修改​​getData()​​​方法,查询​​album_art​​字段

public class MediaStoreMusicDao implements IDao<Music> {
private Context content;

public MediaStoreMusicDao(Context content) {
this.content = content;
}

@Override
public List<Music> getData() {
//声明返回值
List<Music> musics = new ArrayList<>();
//准备ContentResolver
ContentResolver cr = content.getContentResolver();
//准备Uri
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
//读数据,获取Cursor对象
String[] projection = {
"_id",//0
"_data",//1->path
"title",//2
"duration",//3
"album",//4
"artist",//5
"album_artist",//6
"album_key"//7
};//读取的字段
String selection = null;
String[] selectionArgs = null;
String sortOrder = null;
Cursor c = cr.query(uri, projection, selection, selectionArgs, sortOrder);
//遍历Cursor,向返回值中添加数据
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
Music music = new Music();
music.setId(c.getLong(0));
music.setPath(c.getString(1));
music.setTitle(c.getString(2));
music.setDuration(c.getInt(3));
music.setAlbum(c.getString(4));
music.setArtist(c.getString(5));
music.setAlbumArtist(c.getString(6));
music.setAlbumKey(c.getString(7));
music.setAlbumArt(getAlbumArtByKey(music.getAlbumKey()));
musics.add(music);
}
//释放资源
c.close();
c = null;
return musics;
}

//根据albumkey获取albumart
private String getAlbumArtByKey(String key) {
//准备返回值
String albumArt = null;
if (key != null) {
//准备ContentSolver
ContentResolver cr = content.getContentResolver();
//准备Uri
Uri uri = MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI;
//执行查询获取Cursor
String[] projection = {"album_art"};
String selection = "album_key=?";
String[] selectionArgs = {key};
Cursor c = cr.query(uri, projection, selection, selectionArgs, null);
//分析Cursor
if (c.moveToFirst()) {
albumArt = c.getString(c.getColumnIndex("album_art"));
}
//释放资源
c.close();
c = null;
}
return albumArt;
}
}

查询到了​​album_art​​现在在列表中显示出来,item_music布局修改如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp">

<ImageView
android:id="@+id/img_music_art"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginRight="10dp" />

<TextView
android:id="@+id/tv_music_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/img_music_art"
android:maxLines="1"
android:text="title"
android:textColor="#222222"
android:textSize="15dp" />

<TextView
android:id="@+id/tv_music_duration"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginLeft="10dp"
android:maxLines="1"
android:text="00:00"
android:textColor="#222222"
android:textSize="15dp" />

<TextView
android:id="@+id/tv_music_album"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_below="@+id/tv_music_title"
android:layout_toRightOf="@+id/img_music_art"
android:maxLines="1"
android:text="path......"
android:textColor="#999999"
android:textSize="15dp" />

<TextView
android:id="@+id/tv_music_artist"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_below="@+id/tv_music_title"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@+id/tv_music_album"
android:maxLines="1"
android:text="path......"
android:textColor="#999999"
android:textSize="15dp" />
</RelativeLayout>

MusicAdapter修改一下以便能展示缩略图

public class MusicAdapter extends BaseAdapter<Music> {
public MusicAdapter(Context context, List data) {
super(context, data);
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
Music music = getData().get(i);
ViewHolder holder;
if (view == null) {
view = getInflater().inflate(R.layout.item_music, null);
holder = new ViewHolder();
holder.title = view.findViewById(R.id.tv_music_title);
holder.duration = view.findViewById(R.id.tv_music_duration);
holder.album = view.findViewById(R.id.tv_music_album);
holder.artist = view.findViewById(R.id.tv_music_artist);
holder.musicart = view.findViewById(R.id.img_music_art);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
holder.title.setText(music.getTitle());
holder.duration.setText(CommonUtils.getFormattedTime(music.getDuration()));
holder.album.setText(music.getAlbum());
holder.artist.setText(music.getArtist());

String imagePath = music.getAlbumArt();
if (imagePath != null) {
Bitmap bitmap = BitmapFactory.decodeFile(music.getAlbumArt());
holder.musicart.setImageBitmap(bitmap);
} else {
holder.musicart.setImageResource(R.mipmap.ic_launcher);
}
return view;
}

class ViewHolder {
TextView title;
TextView duration;
TextView album;
TextView artist;
ImageView musicart;
}
}

​源码下载​