android 音乐播放器 获取sd卡所有音乐文件,android示例之音乐播放器第七天(实现第六天吹的牛之得到SD卡的所有音乐文件)...

这是一篇转载的文章,原文章的地址我记住,不过感谢原来的作者。

得到SD卡上的所有音频文件,除了使用之前使用的遍历的方法之外,android提供了更加专业的方式直接查询得到音频文件。

得到音频文件之后,可以通过ListView显示一些文件的基本属性:歌手、唱片图片、播放时间长度等等信息。

看了一遍代码,好几个类和方法没有明白具体什么意思。

首先是布局文件:activity_main.xml

android:layout_width="match_parent"

android:layout_height="match_parent" >

android:id="@+id/listView"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_marginTop="10sp" >

显示列表的布局文件:musiclist.xml

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal" >

android:layout_width="50sp"

android:layout_height="50sp"

android:orientation="vertical" android:gravity="center" >

android:id="@+id/listImage"

android:layout_width="40sp"

android:layout_height="40sp" />

android:layout_width="match_parent"

android:layout_height="50sp"

android:orientation="vertical" >

android:id="@+id/listName"

android:layout_width="fill_parent"

android:layout_height="match_parent"

android:layout_weight="1"

android:gravity="center_vertical"

android:paddingLeft="10dp"

android:singleLine="true"

android:textSize="16sp" />

android:id="@+id/list_Singer"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_weight="1"

android:gravity="center_vertical"

android:paddingLeft="10dp"

android:singleLine="true"

android:textSize="13sp" />

音频文件实体类:

public class MusicInfo {

private int musicIndex; //排序号

private int musicAlubmId;//专辑ID

private String musicName;// 歌曲名

private String musicSinger;// 歌手名

private int musicTime;// 歌曲时间长度

private String musicAlubm;// 专辑名称

private int musicSize;// 歌曲大小

private String musicPath;// 歌曲路径

}

其中的get和set方法就不写了。

主Activity类:

public class MainActivity extends Activity {

public MusicAdapter mAdapter;

private ListView mListView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mListView = (ListView) findViewById(R.id.listView);

mAdapter = new MusicAdapter(this);

mListView.setAdapter(mAdapter);

}

}

适配器类:

public class MusicAdapter extends BaseAdapter {

// 用来获得ContentProvider(共享数据库)

public ContentResolver cr;

// 用来装查询到的音乐文件数据

public Cursor cur;

// 歌曲信息列表

public List musicList;

public Context context;

public MusicAdapter(Context context) {

this.context = context;

// 取得数据库对象

cr = context.getContentResolver();

musicList = new ArrayList();

//要查询哪些字段

String[] mString = new String[] { MediaStore.Audio.Media.DISPLAY_NAME,

MediaStore.Audio.Media.ALBUM, MediaStore.Audio.Media.ARTIST,

MediaStore.Audio.Media.DURATION, MediaStore.Audio.Media.SIZE,

MediaStore.Audio.Media.ALBUM_ID, MediaStore.Audio.Media.DATA };

// 查询所有音乐信息

cur = cr.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, mString,

null, null, null);

if (cur != null) {

// 移动游标到第一个

cur.moveToFirst();

int j = 1;

//遍历所有查询到的记录

for (int i = 0; i < cur.getCount(); i++) {

if (cur.getString(0).endsWith(".mp3")) {// 过滤获取MP3文件

MusicInfo mInfo = new MusicInfo();

String musicName = cur.getString(0).substring(0,

cur.getString(0).lastIndexOf(".mp3"));

mInfo.setMusicIndex(j++);

mInfo.setMusicName(musicName);

mInfo.setMusicAlubm(cur.getString(1));

mInfo.setMusicSinger(cur.getString(2));

mInfo.setMusicTime(cur.getInt(3));

mInfo.setMusicSize(cur.getInt(4));

mInfo.setMusicId(cur.getInt(5));

mInfo.setMusicPath(cur.getString(6));

musicList.add(mInfo);

}

cur.moveToNext();

}

}

}

//下面这三个方法是BaseAdapter中方法的覆写,不太明白是什么意思

/**

* 得到音频文件的数量

*/

public int getCount() {

return musicList.size();

}

/**

* 得到指定序号的音频文件

*/

public Object getItem(int arg0) {

return musicList.get(arg0);

}

/**

* 得到指定的序号ID

*/

public long getItemId(int arg0) {

return arg0;

}

public View getView(int arg0, View arg1, ViewGroup arg2) {

LayoutInflater mlistLayout = LayoutInflater.from(context);

View mlistView = mlistLayout.inflate(R.layout.musiclist, null);

TextView songName = (TextView) mlistView.findViewById(R.id.listName);

TextView singerName = (TextView) mlistView.findViewById(R.id.list_Singer);

ImageView songImage = (ImageView) mlistView.findViewById(R.id.listImage);

int mid = musicList.get(arg0).getMusicIndex();//取得音频文件的排序号

String musicName = musicList.get(arg0).getMusicName();

String musciSinger = musicList.get(arg0).getMusicSinger();

if (musciSinger.contains("")) {

musciSinger = "";

}

Bitmap img = getAlbumArt(musicList.get(arg0).getMusicId());

songName.setText(mid + ". " + musicName);

singerName.setText(musciSinger);

songImage.setImageBitmap(img);

return mlistView;

}

/**

* 歌曲专辑图片显示,如果有歌曲图片,才会返回,否则为返回默认的图片

* @param albumId

* @return 返回类型Bitmap

*/

public Bitmap getAlbumArt(int albumId) {// albumId是音乐专辑的id

Bitmap bitmap = null;

Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");

Uri albumArtUri = ContentUris.withAppendedId(sArtworkUri, albumId);

try {

bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), albumArtUri);

bitmap = Bitmap.createScaledBitmap(bitmap, 30, 30, true);

} catch(Exception e){

e.printStackTrace();

//如果没有找到就显示默认的图片

bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.album);

}

return bitmap;

}

}

运行的截图是:

0818b9ca8b590ca3270a3433284dd417.png

我这里面就一首歌,这个示例最重要的是解决了另一个问题:取得音频文件的播放时间长度。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值