本来没打算写音乐播放器的,可是由于天天动听要停服了,而且又不喜欢酷狗等音乐播放器,因为太占用内存了,而且有些要收费的歌曲还没有帮我们过滤去(个人看法,勿喷)

所以就开始写一个简单的音乐播放器,当然,第一个想到的功能是本地音乐文件,所以就从这方面先下手了。

====================================================================

首先,要了解一下,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却要,我也搞不懂)

要的权限是读取内存卡的权限,不加的会错误

到最后上下效果图

android 系统音频文件夹 安卓音乐文件_Android

效果比较简单