音乐存储在了mnt-sdcard-Music文件夹下
歌曲的缩略图则保存到了以下路径
我们可以导出这张图片,然后加一个图片的后缀,就可以预览了
打开audio表,存储这歌曲信息
打开album_info表,存储着封面信息
那么怎么让图片和歌曲对应起来?这就要靠album_key这个字段了,通过audio中的album_key找到album_info中相等的album_key以此来拿到album_art
album_art是封面图的存储路径
Music类中增加
private String albumKey;
private String albumArt;
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字段
@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()));
}
//释放资源
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布局修改如下:
<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:maxLines="1"
android:text="title"
android:textColor="#222222"
android:textSize="15dp"
android:layout_toRightOf="@+id/img_music_art"
/>
<TextView
android:id="@+id/tv_music_duration"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:maxLines="1"
android:text="00:00"
android:textColor="#222222"
android:textSize="15dp"
android:layout_alignParentRight="true"
android:layout_marginLeft="10dp"
/>
<TextView
android:id="@+id/tv_music_album"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:maxLines="1"
android:layout_below="@+id/tv_music_title"
android:text="path......"
android:textColor="#999999"
android:textSize="15dp"
android:layout_toRightOf="@+id/img_music_art"
/>
<TextView
android:id="@+id/tv_music_artist"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:maxLines="1"
android:layout_below="@+id/tv_music_title"
android:text="path......"
android:textColor="#999999"
android:textSize="15dp"
android:layout_toRightOf="@+id/tv_music_album"
android:layout_marginLeft="10dp"
/>
</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;
}
}
效果图