本来没打算写音乐播放器的,可是由于天天动听要停服了,而且又不喜欢酷狗等音乐播放器,因为太占用内存了,而且有些要收费的歌曲还没有帮我们过滤去(个人看法,勿喷)
所以就开始写一个简单的音乐播放器,当然,第一个想到的功能是本地音乐文件,所以就从这方面先下手了。
====================================================================
首先,要了解一下,Android手机的音乐文件都是放在一个数据库的,很多用过以前那些旧播放器的大大们肯定都看到过“媒体库”这个名词,这个媒体库就是一个数据库,存放着我们想要的音乐。所以我们可以在这方面下手,而不是跟别人说的“遍历内存卡”。
步骤比较简单,由于要存放音乐,肯定要构建一个bean来存放你音乐的信息,由于需求暂时比较简单,所以我只制定了三个,分别是音乐路径,音乐显示名,音乐大小
构建的类如下:
public class MusicBean {
private String MusicName;
private String MusicPath;
private String MusicLenght;
public String getMusicLenght() {
return MusicLenght;
}
public void setMusicLenght(String musicLenght) {
MusicLenght = musicLenght;
}
public void setMusicName(String musicName) {
MusicName = musicName;
}
public void setMusicPath(String musicPath) {
MusicPath = musicPath;
}
public String getMusicName() {
return MusicName;
}
public String getMusicPath() {
return MusicPath;
}
}
<br/>
构建好我们的载体后,就要开始要数据了,既然是对数据库操作,那么肯定要用到我们常用到的游标操作,所以我们需要用到cursor,直接上代码
private List<musicbean> getlist() {
Cursor cursor;
MusicBean musicBean = new MusicBean();
List<musicbean> list = new ArrayList<>();
cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
while (cursor.moveToNext()) {
musicBean = new MusicBean();
musicBean.setMusicName(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME)));
musicBean.setMusicPath(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)));
musicBean.setMusicLenght(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION)));
int i = Integer.parseInt(musicBean.getMusicLenght().toString());
if (i>200000)
list.add(musicBean);
Toast.makeText(MusicListActivity.this, list.size() + "", Toast.LENGTH_SHORT).show();
}
return list;</musicbean></musicbean>可<br/>
可以看出,这个方法调用了数据库,而且各个方法的英文都比较简单,就不解释了,注意,这儿返回的都是string类型,所以请不要使用int等去代替,而返回的list就是我们需要的数据的集合了,这时候就可以对这些数据操作,细心的朋友应该可以看到我在操作中,将字节数<20w的音乐文件删除了,这是用为有时候会留下一些琐碎的音乐文件,比如浏览网页时候留下的,或则铃声之类的,获得数据后,可以使用listview来哦包装下我们的音乐,我直接上adapter的内容吧
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView= LayoutInflater.from(context).inflate(R.layout.adapter_musiclist,null);
TextView textView= (TextView) convertView.findViewById(R.id.textView);
textView.setText(list.get(position).getMusicName());
return convertView;
}
比较简单,所以直接使用view就可以了,然后记得加下权限(以前在eclipse 不用,现在在Androidstudio却要,我也搞不懂)
要的权限是读取内存卡的权限,不加的会错误
到最后上下效果图
效果比较简单