Android第三次作业

制作音乐播放器

实现的功能:

歌曲的播放、暂停、停止、上一首、下一首、歌单列表的显示(获取本地歌曲)。

成品图:

功能代码实现:

实现歌曲的播放、暂停、停止、上一首、下一首:

 public void onClick(View v) {//按钮功能实现
        switch (v.getId()){
            case R.id.pre:
                changeMusic(--current);//切哥
                break;
            case R.id.play:
                if (mediaPlayer==null){//如果没有歌在播放
                    changeMusic(0);//切歌到第一首
                }else {//如果有歌在播放
                    if (!mediaPlayer.isPlaying())//如果歌曲恰好没有正在播放
                    {
                        mediaPlayer.start();//继续播放
                    } else {//如果歌曲恰好正在播放
                        Toast.makeText(MainActivity.this, "已经在播放", Toast.LENGTH_SHORT).show();//弹出提示信息
                    }
                }
                break;
            case R.id.next:
                changeMusic(++current);//切歌
                break;
            case R.id.pause:
                if(mediaPlayer.isPlaying()){//如果歌曲恰好正在播放
                    mediaPlayer.pause();//暂停播放
                }
                break;
            case R.id.stop:
                if(mediaPlayer.isPlaying()){//如果歌曲恰好正在播放
                    mediaPlayer.reset();//重置歌曲
                    try{
                        mediaPlayer.setDataSource(list.get(0).path);//获取第一首歌的资源
                        mediaPlayer.prepare();//准备播放
                    }catch(IOException e){
                        e.printStackTrace();
                    }
                }
                break;
        }
    }

  歌单列表的实现(涉及两个文件):

//在MainActivity.java文件中
 private void init(){//初始化
        listview=(ListView)findViewById(R.id.listview);//为listview添加监听
        list=new ArrayList<>();//建立存放歌曲的list列表
        Cursor a=c.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.AudioColumns.IS_MUSIC);//获取本地音乐资源
        if(a!=null){
            while(a.moveToNext()){//读取音乐资源
                SongInfomation x=new SongInfomation();//建立空音乐信息类的对象,方便对歌曲信息读取
                x.song = a.getString(a.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));//获取歌曲
                x.singer = a.getString(a.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));//获取歌手名
                x.path = a.getString(a.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));//获取路径
                x.size = a.getLong(a.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));//获取大小
                x.duration=a.getInt(a.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));//获取持续
                if(x.size>1000*800){
                    if(x.song.contains("-")){//如果歌名中包含字符‘-’
                        String[] s=x.song.split("-");//按‘-’进行分割
                        x.song=s[1];//将后半部分作为歌名存储
                        x.singer=s[0];//将前半部分作为歌手名存储
                    }
                    list.add(x);//将已经存储信息的歌曲信息对象放入列表
                }
            }
            a.close();
        }

//在Adapter1.java文件中
public View getView(final int i, View view, ViewGroup viewGroup) {
        Display dis = null;
        if (view == null) {
            dis = new Display();
            view = View.inflate(context, R.layout.song, null);//找到展示歌曲信息的布局文件,也就是我的项目中的“menu.xml”文件
            dis.song = (TextView) view.findViewById(R.id.song);//监听、绑定歌单,将信息放到Display的对象中
            dis.singer = (TextView) view.findViewById(R.id.singer);
            dis.duration = (TextView) view.findViewById(R.id.duration);
            dis.position = (TextView) view.findViewById(R.id.postion);
            view.setTag(dis);//给view添加信息
        } else {
            dis = (Display) view.getTag();//可以通过getTag方法提取出我用setTag添加的信息,然后返回给Display的对象
        }
        dis.song.setText(list.get(i).song.toString());//将Display对象的一些需要的属性展示在界面或者传给需要的变量
        dis.singer.setText(list.get(i).singer.toString());
        int duration=list.get(i).duration;
        dis.position.setText(i+1+"");//歌曲序列数的实现
        return view;
    }

  

代码地址(内含APK):https://git.coding.net/mmxf/android3.2.0.git

posted @ 2018-12-11 11:17  mmxf  阅读(195)  评论(0编辑  收藏  举报