Android MediaPlayer实现本地音乐播放器

发布时间:2021-07-27 07:34:58

这个软件是本人用于学*Android知识开发的,由于是新手,所以从总体架构上来说可能有些混乱,功能实现方面也有很多不完善之处,敬请见谅,也欢迎各位在下面评论出指出问题。


1.界面展示
首页播放模式详情页前台服务

2.功能简述

1.自动搜索本地音乐并展示出来,实现点击音乐自动播放。
2.通过按钮控制音乐播放:上一曲、下一曲、播放和暂停。
3.实现手动改变音乐播放模式:顺序播放(默认)、随机播放、单曲循环。
4.首页点击图片可跳转到详情页,支持手动拖动进度条改变播放进度。
5.手势跳转活动:支持在详情页右滑结束当前活动,在首页左滑启动详情页活动(因未知原因该手势不能被检测到,正在寻找办法)。
6.音乐前台服务:保证后台播放不会因为内存不足被杀死,实现点击前台服务启动首页活动。


3.各类文件简述

详细的代码我就不贴了,多了感觉很占篇幅,这里就对各类文件进行简单阐述,方便读者快熟了解代码结构,具体代码可以点击下面的GitHub地址查看。


1.实体类Song.java

存放音乐的各种信息,声明对应信息的变量并为变量设置getter and setter方法。


//歌手
private String singer;

//歌名
private String song;

//歌曲的地址
private String path;

//歌曲的时长
private int duration;

//歌曲的大小
private long size;

//歌曲的专辑图片
private Bitmap image;

2.工具类MusicUtils.java

该类中有三个方法:
getMusicData():该方法扫描系统里的歌曲的相关信息,并将其放在list集合中,该方法会返回一个有音乐信息的list集合。


formatTime(int time):调用该方法用来格式化获取到的时间duration,因为取得的时间duration是以毫秒为单位的,需要进行转换。


getAlbum(String mediaUri):该方法需要一个uri地址,也就是音乐的存放地址path,将path地址传入后可根据音乐地址获得专辑图片,并返回给调用方。


3.工具类MyApplication.java

该方法可以获取到一个全局的context对象,因为在一些像工具类这种类中可能会需要用到context,这种情况我们不方便获取到一个context,就可以靠自定义类继承Application来获取。


4.RecyclerView的适配器SongAdapter.java

类中定义了一个接口MyItemClickListener用于监听子项的点击事件,并设置了setListener方法用于传递子项的下标。


定义内部类ViewHolder继承RecyclerView.ViewHolder,用于获取到子项布局的各部件实例。


有参构造方法SongAdapter(List songList)用于数据传入。


重写onCreateViewHolder、onBindViewHolder、getItemCount三个方法为子项设置相应的数据。


5.音乐后台播放服务MusicService.java

首先定义了一个MusicBinder类,用于实现活动和服务的通信,可以在活动中控制音乐的播放状态。


重写onCreate()方法用于在第一次服务创建的时候获取到活动中的音乐信息。


onStartCommand()方法用通知将服务变成一个前台服务,这里用了自定义通知布局,并通过广播的方式实现自定义通知里的按键功能实现控制音乐的播放状态,在方法中注册广播接收器用于接收通知按键发出的广播。


定义updateNotification()方法用于改变通知的界面显示,每当音乐信息发生变化时就调用该方法对通知界面进行更新。


最后重写onDestroy()方法在服务销毁时,释放相关资源。


6.主活动MainActivity.java

首先在活动中进行运行时权限处理,判断用户是否授权过权限,如果没有就申请该权限,如果已经授权过了,就调用initSongs()方法进行初始化操作。重写onRequestPermissionsResult()对请求权限后用户的操作进行判断:如果用户同意授权,就调用initSongs()方法,如果用户拒绝授权,就弹出一条权限获取失败提示。


initSongs()方法调用MusicUtils工具类的getMusicData()获取本地音乐信息,并用 List数组进行接收,然后foreach遍历list数组并将数据添加到songList中。


然后就是开启并绑定服务,用于控制音乐播放。接着实例化各控件,为RecyclerView绑定适配器展示数据,并调用接口实现设置RecyclerView子项点击事件,将该子项的音乐信息传入到服务中进行播放。定义ServiceConnection变量并重写onServiceConnected和onServiceDisconnected两个方法实现活动与服务的绑定状态进行相应的操作。


实例化Toolbar,并让他有ActionBar的功能,然后设置菜单menu,重写onCreateOptionsMenu()方法允许菜单显示出来,重写onOptionsItemSelected()方法设置菜单点击事件。


定义一个线程用于帮助handler实时更新UI,让线程每过500毫秒就更新一次,取得服务正在播放的音乐的position参数发送给Handler,使用handler接收线程发出的消息即position,根据position判断歌曲信息是否发生改变,通知是否进行数据更新。需要更新就调用initMediaPlayer()方法对播放界面的UI进行设置。


定义startMyActivity()方法用于启动PlayShowActivity活动,判断当前系统的版本,选择合适的启动方式:共享元*舳礁龌疃褂孟嗤淖计舳被嵊邢嘤Φ亩Ч灰话闫舳挥卸Ч


重写onDestroy() 在活动销毁时对服务进行解绑和停止线程。


7.详情页活动PlayShowActivity.java

该活动与主活动相差不大,只是增加在Handler中实时更新音乐进度条并未进度条设置点击事件。


自定义一个MyGestureListener类继承view的GestureListener类,重写onFling()方法,用于监听屏幕的左右滑动手势,并实现左滑结束当前活动。


4.源码地址

GitHub:https://github.com/wangjun159/MusicPlayer

相关文档

  • 委托借贷居间合同范文3篇
  • 儿童,当心罐头食品
  • 机器学习知识分享目录
  • 点都德红米肠粉做法
  • 五十四中教工元旦联欢会节目串词
  • 收看全国抗击新冠肺炎疫情表彰大会观后感新版多篇
  • 在思科路由器上配置SSH登录
  • 浏览器内写JS测试代码--测试JS
  • 大学生建筑实习报告手册
  • 凉拌豆角的家常做法
  • 京东运费险在哪里查看
  • 佳宝V52汽车灯光怎么调节?
  • 钻石彩虹鱼好养吗,怎么养
  • 学雷锋国旗下演讲稿
  • 班级学习委员工作计划范文
  • 郑州考研培训机构哪个好
  • 2015年BEC商务英语考试高级真题及答案阅读部分
  • 童话与生命(图文)
  • 宁波春节习俗
  • 模式识别(三):线性判别函数
  • ios 函数式编程与响应式编程
  • 银行信用借款合同通用样书
  • 高考考生怎么吃才营养
  • 温柔而有力量的句子精选40句
  • 关于人物好品质的词语
  • 考前自主复习实现高考完美冲刺
  • linux下安装tmux
  • spdlog日志库使用
  • 2007年财政监督总结与2008工作计划 工作计划总结
  • 宁波周边自驾游景点介绍
  • 猜你喜欢

  • 夏季防雷电小知识有哪些
  • 东莞市锐山正电子科技有限公司企业信用报告-天眼查
  • 2016年全国硕士研究生招生工作管理规定
  • RSL 使用教程
  • 影响电液比例溢流型三通减压阀输出压力因素的数值分析
  • “课内外一体化”半俱乐部体育教学模式的构建与实施
  • 汽车车身设计-第二章
  • 建设工程合同备案法规
  • 中山市卫康生化科技有限公司企业信用报告-天眼查
  • avn配置失效:command not found: nvm
  • java jquery干嘛的_jquery是什么?jquery是干什么的?
  • 岳阳市屈原管理区中顺饲料厂(企业信用报告)- 天眼查
  • 龙抬头祝福励志的话
  • 闲置土地处置法律文书示范文本概述
  • 苏州海博科技有限公司(企业信用报告)- 天眼查
  • 语文教学中审美能力的培养论文
  • 【湘教版】八年级数学下册:优秀教案全集(Word版)3.1 第1课时 平面直角坐标系
  • 信息学奥赛考python吗_信息学奥赛,如何助力升学考试
  • 白酒类营销策划方案
  • 关于临床执业医师考题汇总Ⅳ
  • 成本会计课后习题参考答案
  • Java多线程系列(八):实现callable接口
  • 20XX年6月公司员工入党申请书模板
  • 鲁科版高一化学必修二课时训练:第一章 第3节 元素周期表的应用 (1)
  • 怎么把女朋友领去开房
  • 新版部编人教版二年级下册数学第七单元试卷(新版教材)
  • 云南省安全生产监督管理局关于印发云南省烟花爆竹安全专项整治工
  • 第八讲国际多式联运71页PPT
  • 海权论视角下南海安全问题中的美国因素
  • 初一叙事作文《军训的日子》500字(共9页PPT)
  • 01-初中物理人教版九年级全一册第十三章第1节分子热运动
  • 生物化学(简单清晰)第4章 糖代谢
  • 取样钻机项目可行性研究报告申请报告
  • html发展历史
  • 交联聚合物微球分散体系封堵性能
  • 2012三级浙江省建造师考试施工管理(必备资料)
  • 315上海市住宅装饰装修验收标准(2004版315标准)
  • 精品独创--行政人事部2019年度工作总结
  • 主动脉夹层的外科分型及治疗对策-文档资料
  • 新时期大学生的道德素质教育
  • 精选总结-房地产销售员年终工作总结(三)
  • 北京市崇文区培新小学企业信用报告-天眼查
  • 电脑版