1.播放界面截图:

播放列表:

2.关键代码:

获取音乐列表(通过多媒体数据库中存储的的信息)(首先定义了一个Music类用于存储音乐文件的各种信息):

public List<Music> getmusics( Context context){    List<Music> musiclist=new ArrayList<Music>();//定义一个music类型的列表  //定义一个游标,用来遍历音乐文件    Cursor cursor=context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);    if(cursor.moveToFirst()){        while(!cursor.isAfterLast()){            Music music=new Music();            int music_id=cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID));//音乐的ID            int album_id=cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID));//专辑的ID            String album=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));//专辑名称            String title=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));//歌曲名称            String artist=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));//歌手            double time=cursor.getDouble(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION))/60000;      //音乐的播放时长,由于单位是毫秒所以除了60000,但暂时还没有以分:秒 形式显示出来            String url=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));//音乐文件的路径            String title_artist=title+"--"+artist;            int isMusic=cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.IS_MUSIC));            if(isMusic!=0){                music.setMusic_id(music_id);                music.setAlbum_id(album_id);                music.setAlbum(album);                music.setTitle(title);                music.setArtist(artist);                music.setTime(time);                music.setUrl(url);                music.setTitle_artist(title_artist);                musiclist.add(music);            }            cursor.moveToNext();        }    }    return musiclist;}//设置数据适配器
SimpleAdapter adapter=new SimpleAdapter(getApplicationContext(),musiclist,R.layout.music_list,new String[]{"title_artist","album"},new int[]{R.id.title_artist,R.id.album});lv.setAdapter(adapter);//绑定数据适配器
//为lv这个list设置监听器,并重写onItemClick方法,点击Item可以播放音乐
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {                play(mp3list.get(i).getUrl(),mediaplay);//mp3list.get(i).getURl(),是你点击的Item对应音乐的文件路径,play是自己定义的一个播放音乐的方法            }        });

播放,暂停,上一首,下一首
ImageButton.OnClickListener listener = new ImageButton.OnClickListener() {    public void onClick(View v) {        switch (v.getId()) {            case R.id.bt_last:        //上一首                if (current_music > 0) {                    current_music = current_music - 1;                    mediaplay.reset();                    play(mp3list.get(current_music).getUrl(), mediaplay);                    isrelease = false;                    start.setImageDrawable(getResources().getDrawable(R.drawable.paste));                    if(mp3list.size()!=0){                        music_name.setText(mp3list.get(current_music).getTitle());                        artist_name.setText("-- "+mp3list.get(current_music).getArtist()+" --");                        total_time.setText(mp3list.get(current_music).getFormatTime());                        progressbar.setMax(mp3list.get(current_music).getTime());                   }                }else{                    current_music = mp3list.size()-1;                    mediaplay.reset();                    play(mp3list.get(current_music).getUrl(), mediaplay);                    isrelease = false;                    start.setImageDrawable(getResources().getDrawable(R.drawable.paste));                    if(mp3list.size()!=0){                        music_name.setText(mp3list.get(current_music).getTitle());                        artist_name.setText("-- "+mp3list.get(current_music).getArtist()+" --");                        total_time.setText(mp3list.get(current_music).getFormatTime());                        progressbar.setMax(mp3list.get(current_music).getTime());                    }                }                break;        //播放,暂停            case R.id.bt_start:                if(isrelease){                    mediaplay.reset();                    play(mp3list.get(current_music).getUrl(), mediaplay);                    isrelease=false;                }                if(!mediaplay.isPlaying()){                    mediaplay.start();                    ((ImageButton)v).setImageDrawable(getResources().getDrawable(R.drawable.paste));                }else {                    mediaplay.pause();                    ((ImageButton) v).setImageDrawable(getResources().getDrawable(R.drawable.start));                }                break;        //下一首            case R.id.bt_next:                if (current_music < mp3list.size()-1) {                    current_music = current_music + 1;                    mediaplay.reset();                    play(mp3list.get(current_music).getUrl(), mediaplay);                    start.setImageDrawable(getResources().getDrawable(R.drawable.paste));                    isrelease=false;                    if(mp3list.size()!=0){                        music_name.setText(mp3list.get(current_music).getTitle());                        artist_name.setText("-- "+mp3list.get(current_music).getArtist()+" --");                        total_time.setText(mp3list.get(current_music).getFormatTime());                        progressbar.setMax(mp3list.get(current_music).getTime());                    }                }else{                    current_music = 0;                    mediaplay.reset();                    play(mp3list.get(current_music).getUrl(), mediaplay);                    start.setImageDrawable(getResources().getDrawable(R.drawable.paste));                    isrelease=false;                    if(mp3list.size()!=0){                        music_name.setText(mp3list.get(current_music).getTitle());                        artist_name.setText("-- "+mp3list.get(current_music).getArtist()+" --");                        total_time.setText(mp3list.get(current_music).getFormatTime());                        progressbar.setMax(mp3list.get(current_music).getTime());                    }                }                break;

3.代码链接:https://git.coding.net/ck__/Android_finalwork.git

4.APK地址(文件后缀apk):https://git.coding.net/ck__/Android_finalwork.git

5.程序录屏链接:https://www.bilibili.com/video/av39817213/

转载于:https://www.cnblogs.com/ck03/p/10105319.html

1600802002相关推荐

  1. 软件工程—团队作业1

    软件工程-团队作业1 团队称号:Thanos (灭霸,超叼的一个动漫人物) 团队成员: 队长 成凯 1600802002  博客链接: http://www.cnblogs.com/ck03/   党 ...

  2. android 大作业

    一.团队成员 姓名 学号 博客地址 班级 成凯 1600802002 http://www.cnblogs.com/ck03/ 161 党康 1600802004 http://www.cnblogs ...

最新文章

  1. Android线程之主线程向子线程发送消息
  2. 【转】体验 Silverlight 5 3D开发之环境搭配篇
  3. 百度地图api 去左下角百度地图logo的方法
  4. window7下nginx配置文件详解
  5. 2014第3周四杂记
  6. IIS 崩溃的后的感受
  7. Linux下遍历目录下的文件
  8. TCP快速重传为什么是三次冗余ack
  9. cad通过钢筋大样生成钢筋明细表插件_如何设计一套建筑电气CAD施工图?看完你就知道!涨知识...
  10. 读写分离 mysql_详解MySQL实现主从复制过程及mycat读写分离步骤
  11. Codeforces.1051G.Distinctification(线段树合并 并查集)
  12. 上海道宁联合德国think-cell,为您提供更便捷高效的PowerPoint插件
  13. ray 渲染基本使用流程
  14. 谈谈本人做广告联盟的经验
  15. 世界上最流行的开放源代码冲锋枪AK-47
  16. 明港镇计算机培训班,平桥区建筑工匠培训班在明港新集村开班
  17. 蓝拓扑便携式分析仪驱动程序_拔出便携式USB硬盘驱动器会损坏计算机吗?
  18. android 4.4 获取图片主色调,Android Lollipop:使用Palette抽取图片主色调
  19. 错误计算机怎么打开,例举电脑无法开机出现a disk read error错误怎么办呢?
  20. python变量的使用_python变量赋值的几种形式细节

热门文章

  1. 5G:这次中国说了算!
  2. linux学习之VNC远程控制(一)
  3. 1.mongodb在centos上面安装
  4. 一位39岁程序员的困惑:知道得越多编程越慢怎么办?
  5. 搞死了 报错【libc-client.a: could not read symbols: ...
  6. asp.net用url重写URLReWriter实现任意二级域名 (转)
  7. mongodb 结果二次调用_mongodb慢查询记录
  8. python多行字符串输入_python中怎么输入多行字符串
  9. 分享6 个值得收藏的 Python 代码
  10. Python是世界上最好的语言,你不服不行!(附资料)