1、 本科生毕业设计(论文)( 2016 届)设 计 ( 论 文 ) 题 目 Android 手机 APP 开发音乐播放器 作 者 xx 系 、 专 业 计算机科学与技术 班 级 1201 指导教师(职称) xx(副教授) 论 文 字 数 8000 论 文 完 成 时 间 2016 年 4 月 10 日 xx 师范大学 xx 学院教学部制Android 手机 APP 开发音乐播放器计算机科学与技术 1201 xx 指导教师 xx摘要:Android 手机的 APP 开发越来越受到人们的关注。现今社会人们生活压力越来越大,人们更注重精神的需求。人们需要放松,需要释放,需要发泄,而音乐则是调节人们心情
2、的一个有效资源。本文基于 Androidstudio 开发了一款面向 Android 手机的音乐播放器。该播放器包含本地音乐扫描、歌词匹配、音乐播放以及用户管理等功能。该 APP 具备界面优美、使用方便等优点,满足现金市场上的应用需求。关键词:移动互联;Android;音乐播放器APP Development on Android Mobile Phone- Music PlayerComputer Science and Technology class 1201 Liu HanInstructor: Wang LidongAbstract: Android APP development
3、has attracted more and more nowadays. Living pressure of modern society people is more and more serious, which made people pay more attention to mental demand. People need to relax, to release, need to vent, and the music is an effective resources to adjust mood for people . This article develops an
4、 Android music player based on Androidstudio. The player includes local music scan, matching lyrics, music playing and user management, and other functions. The APP has beautiful interface, convenient use, and meet the application requirements of cash in the market.Key words:Mobile Internet; Android
5、.;Music player目 录1 绪论 .41.1 研究背景 .41.2 国内外研究现状 .41.3 系统研究意义 41.4 系统研究目标 .52 相关技术简介 .52.1 Android 技术 .52.2 开发软件介绍 62.2.1 Android studio 平台 62.2.2 SQLite 数据库 .73 系统分析与设计 73.1 系统可行性分析 .73.2 系统需求分析 .73.3 系统用例分析 .73.4 音频数据库 .74 功能的实现 84.1 本地音乐的搜索扫描 .84.1.1 sqlite 数据库连接 84.1.2 音乐数据存储 .84.1.3 音乐信息显示 104.2
6、音乐播放 .134.2.1 音乐点击实现 134.3 音乐的切换暂停 184.4 音乐播放模式的切换 204.5 欢迎界面的实现 225 总结 .23参考文献: .23致谢 .24Android 手机 APP 开发音乐播放器计算机科学与技术 1201 xx 指导教师 xx1 绪论1.1 研究背景在最近这些年里,互联网业务和移动通信已经成为现今发展速度最为迅捷、发展前景最为诱人的两种业务领域。它们正以非常惊人的速度进行增长。迄今为止,全世界里移动通信工具的使用人员数量已经超过了 16 亿人,互联网的使用人员数量也已经超过了 10 亿人。在其中,中国移动通信用户的总数也已经超过 3.7 亿人,而互
7、联网用户的总数则已经超过 5.5 亿人。这一史上未有的高速增长反映着随着时代的发展与技术的进步,人类越来越祈求不受时间、空间限制的信息交互。人们希望在任何时刻、任何地点高速便捷地连入互联网,发布亦或者是获取特定的讯息。由此可见,移动互联网的诞生应是历史中的必然。而 Android 是移动互联下诞生的产物。Android 是 Google 在 07 年 11 月推出的手机操作系统,其的开源性打破了传统手机操作系统的封闭式格局,人们可以根据自身的喜好来修改自己手机,为其添加亦或是完善所需的应用软件。这也是 Android 最为吸引人的地方。 在现在的社会里人们生活压力越来越大,从而使人们更加注重起
8、精神的需求。人们需要放松,需要释放,需要发泄,为了能够让人们在 Android 手机平台上自由的获取音乐资源并且进行收听,很有必要针对该平台开发一款实用的音乐播放器,这正是本文的主要内容。1.2 国内外研究现状现如今市场上常见的音乐播放器包括有 Xmovie,RealPlayer,QuickTim 和 Mplayer 等。Xmovie 它最早是电视机中播放节目的软件,其播放界面十分简陋,其没有其他多余的控制功能;RealPlayer 在低宽带下十分优秀的支持音频、视频多媒体进行低损失传输,同时又具有非常优秀的流媒体在线播放功能;QuickTime 是苹果公司开发的流式音视频解决方案,也是较早出
9、现的流媒体文件格式之一。MPlayer 是 Linux 上出现的电影播放器,其功能十分强大,能够播放大部分音频格式格式的文件。由此可以看出:目前,媒体播放器主要发展趋势有以下几个方向:首先,要支持多样格式化。其次,要有可扩展姓。现今音频播放器的功能已变得越来越全面,如何使得播放器在现有的基础上能够拥有更完善的功能,也是吸引人们接受新产品的一种方式。1.3 系统研究意义 现如今互联网已经进入了较为成熟的时代,各种产品也越来越重视与用户之间的人机交互,这其中尤其少不了移动通讯工具-手机。现如今,智能手机已经逐渐成为绝大部分人民的必备品。无论是使用 Android 系统的三星、华为等手机,还是使用
10、ios 系统的苹果手机。用户所求的依然是更为简单易懂的使用方式,因此手机上的 APP 就被人们尤为期待。在这个智能手机的时代,Android 系统与 IOS系统几乎垄断了整个智能手机平台。手机系统的统一以及开放带来了良好的 APP 开发条件,这样也就促使越来越多的 App 开发公司诞生了。 现如今社会的生活节奏十分紧张,而聆听音乐却是舒缓压力的首要选择,本文试图开发一款可以播放主流音频文件的音频播放器,本设计意图实现的功能主要是能运行 Mp3 等多种音频格式,并且能够进行音频的播放,暂停,停止,播放上一曲,播放下一曲,音量调节,和歌曲文件的管理操作等多种播放控制功能,界面设计力图简明易懂,操作
11、力求简单。目前市面上虽然具备很多的音乐播放器,但是功能多比较繁杂,且不具备轻量级功能。为了能够面向大学生使用,并且占用较少的手机内存,开发一款轻量级的音乐播放器,还是具备较大的研究意义和实用价值。 综合上述分析,本文拟设计一款使用 Android 系统的手机音频播放器,使 Android 手机拥有一款独特个性的音频播放器,使手机应用变得更加生动,与人们生活更加贴近,让手机的主人能够处于音乐视频的旋律之中,让人们的生活更加多样化,也使本人能够更加熟练的使用基于 Android 系统的手机应用编程技术。1.4 系统研究目标本课题的研究目标主要是由以下几方面功能组成:(1)扫描本地音乐的功能:扫描存
12、在手机内存与 sdcard 中的音乐文件,得到其文件有关的信息。(2)音乐播放功能:实现最为基础的播放音乐、暂停音乐、播放上一首、播放下一首音乐的功能。(3)播放模式的切换:实现单曲播放、单曲循环、顺序循环、随机播放。(4)音乐歌词进度匹配功能:未注册用户可以注册并登录该学习平台。(4)用户登陆功能:使登陆后的用户使用部分联网功能。(5)欢迎界面功能:第一次登陆会先进入欢迎界面。2 相关技术简介2.1 Android 技术Android 是一款开源的 Linux 操作系统,由 Google 和开放手机联盟共同领导并进行开发。该操作系统主要应用于市场上的移动手机平台,并且 Android 手机已
13、经深入人心。目前,Android 已经经历了多次的版本更新,下表列出了 Android 系统各种版本的发布时间以及其对应的版本号:表 2-1 Android 版本列表Android 的版本 其发布日期 拥有代号Android 1.1 Android 1.5 2009 年 4 月 30 日 Cupcake(纸杯蛋糕)Android 1.6 2009 年 9 月 15 日 Donut(炸面圈)Android 2.0/2.1 2009 年 10 月 26 日 Eclair(长松饼)Android 2.2 2010 年 5 月 20 日 Froyo(冻酸奶)Android 2.3 2010 年 12
14、月 6 日 Gingerbread(姜饼)Android 3.0/3.1/3.2 2011 年 2 月 22 日 Honeycomb(蜂巢)Android 4.0 2011 年 10 月 19 日 Ice Cream Sandwich(冰淇淋三明治)Android 4.1 2012 年 6 月 28 日 Jelly Bean(果冻豆)Android 4.2 2012 年 10 月 8 日 Jelly Bean(果冻豆)Android5.0 待定 Lime Pie(酸橙派)自 Android 1.5 以来,Android 系统离智能操作系统越来越接近,Google 将 Android 系统的版本
15、用各式甜品来命名。近些年里随着 Android 系统的普及与发展,非常多的厂商开始加入到 Android 的阵营里,在 14 年 1 月,Google 对外公布的数据中,它 Android 系统的全球市场占有率已超过 60%。由于 Android 系统高速发展,在使用 Android 系统的设备中,其搭载的 Android 版本并没有得到很好的统一,各版本都拥有一定的占有率,下图为 Google 公布的各种 Android 版本的市场占有率:图 2-1 Android 各种版本的市场占有率自上图可知,在所有 Android 设备里占有率最高的是 Android4.x,由此可见市场对 Andro
16、id 版本的需求,已经越来越向高版本靠拢,本文也将着重针对 Android4.x 的应用开发进行讲解。2.2 开发软件介绍2.2.1 Android studio 平台Android Studio 是一种 Android 开发环境,本文采用该工具进行开发。该平台是面向 Java 语言的一个开发环境。跟 Java 开发环境 Eclipse 类似,Android Studio 提供了极多的 Android 集成开发工具,方便手机开发人员进行调试。本文选用 Android Studio 工具的另外一个原因在于该工具得到 Google 公司的大力支持。据了解,谷歌宣布将在 15 年底前停止对其他 ID
17、E 开发环境的开发支持(以前主要是以 Eclipse 为主)。谷歌将全力专注于 Android Studio 编译工具的开发和提供技术支持,其对 Eclipse 中止的官方支持包括 Eclipse ADT( Android 开发工具)插件以及 Apache Antt 编译系统等。此外,Android Studio 工具有一定的缺陷,典型的缺陷包括高内存的消耗,但是鉴于该平台的强大功能,且现阶段针对 Android 手机的主流开发平台仍然是 AndroidStudio,因此本文综合多方面因素,仍然选择使用 Android studio 作为开发平台。2.2.2 SQLite 数据库由于本文的数据
18、库属于轻量级,因此选用 SQLite 进行开发。SQLite 数据库是一款使用 C 语言编写的嵌入式数据库,它是一种轻量级的数据库,其最初是为嵌入式而设计的。该数据库的主要优点在于语句处理上比 oracle 或者 SQL Server 快很多,并且对内存的要求很低,在内存中它只需要几百 KB的存储空间。对于开发一个小型的 APP,用于存储部分音乐文件,SQLite 是首选数据库平台。3 系统分析与设计3.1 系统可行性分析经济可行性音乐播放器的成本主要集中在软件开发方面里,开发完只需安装就可以快速的投入使用,所以这点开发成本,十分低下,在经济上是可行的。技术可行性硬件方面,开发只需一台普通的个
19、人电脑机,拥有简单的联网环境就足够了。在软件方面,只需用到 Androd studio 开发集成环境,SQlite3 数据库,jdk8.0,开发语言用到 Java 语言,MVC 设计模式。现今这些资源都是可以轻易得到的。也足以在指定时间内完成开发,所以技术上这也是可行的。操作可行性本文中的音频播放器界面简单明了,让人一目了然。各类功能设计也是规范有序,充分考虑了用户的习惯问题。在操作方面也是完全可行的。3.2 系统需求分析一款安卓智能手机如果没有音乐播放器那就不能正常的播放音频文件,这将导致手机失去一项很重要的功能。音乐播放器是手机必不可少的软件之一,是手机播放音乐的工具,一个好的播放器可以给
20、用户一个好的用户体验,简单快捷的操作是一个播放器所必须的。3.3 系统用例分析用例图设计有关外部用户所能观察到的系统功能的模型图,呈现参与者和其的一些用例,以及它们之间的关系,主要用于对系统、子系统或类似的功能行为进行建模。本文中通过进行需求分析得出用户所需主要功能包括为播放音乐、歌曲切换、循环模式切换等。3.4 音频数据库Android 系统自带的本地音频数据库表格如下:表 3-1 音频信息表字段 解析_id 音频 id,主键_data 文件的绝对路径_display_name 文件名_size 文件大小,其单位为 bytedate_added 加入到数据库的时间,单位为秒date_modi
21、fied 最后修改时间,单位为秒title ID3 信息的标题,无则为不带扩展名的文件名title_key 全大写字母的标题duration 播放时长artist_id 作曲家 idcomposer ID3 信息,作曲家album_id 专辑 idtrack ID3 信息,音轨year ID3 信息,年代is_ringtone 是否为铃声,0 或 1is_music 是否为音乐,只有为 1 时 才会在音乐播放器显示is_alarm 是否为闹钟铃声is_notification 是否为通知铃声借助上表的字段名和 Android 提供的 ContentProvider 类可以针对性的获取音频数据,
22、使本地音乐的扫描得到实现的可能。4 功能的实现4.1 本地音乐的搜索扫描4.1.1 sqlite 数据库连接Cursor cursor = getActivity().getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,MediaStore.Audio.Media.DEFAULT_SORT_ORDER);利用 ContentProvider(内容提供者)调用安卓系统自带 SQlite 音频数据库,这路径地址为MediaStore.Audio.Media.EXTERNAL
23、_CONTENT_URI,返回结果为 cursor 结果集接口(类似于第一个音频文件数据的数据源地址)4.1.2 音乐数据存储List mp3Infos = new ArrayList();for (int i = 0; i 0) /如果音乐不是从头播放mediaPlayer.seekTo(positon);public static void cleanPosition() position = 0;通过 intent 意图来接受音乐路径与音乐状态标志,实现 OnPrepareLister 接口,重写onPrepared(MediaPlayer mp)方法,传入媒体播放器对象 MediaPl
24、ayer,用mediaPlayer.seekTo(positon);实现动态调整音乐进度。重写 onDestroy()清空音乐进度值,释放媒体播放器对象资源,将媒体播放器对象置空。4.3 音乐的切换暂停通过点击列表实现音乐的切换暂停,在布局文件里的上一首、下一首按钮添加 onClick 属性,属性值为 btnClickpublic void btnClick(View v) switch (v.getId() case R.id.music_pre:localMusicFragment.musicPre();break;case R.id.music_next:localMusicFragme
25、nt.musicNext();break;case R.id.music_pattern:ToastUtils.show(this, “长按切换播放模式“);break;在布局所对应活动里创建方法 btnClick(View v),根据不同的视图 id 调用不同的 case 分支。public void musicNext() position+;if (position = mp3Infos.size() position = 0;Mp3Info mp3Info = mp3Infos.get(position);listView.setSelection(position);MusicUti
26、l.changeMusicState(getActivity(), mp3Info.getUrl(), AppConstant.PlayerMsg.PLAY_MSG);if (mylistener != null) mylistener.onMusicClick(mp3Info);public void musicPre()position-;if(position0)position=mp3Infos.size();Mp3Info mp3Info = mp3Infos.get(position);listView.setSelection(position);MusicUtil.change
27、MusicState(getActivity(), mp3Info.getUrl(), AppConstant.PlayerMsg.PLAY_MSG);if (mylistener != null) mylistener.onMusicClick(mp3Info);定义在 LocalMusicFragment 的自定义方法实现音乐的上下首切换,利用 if 语句进行第一首的上一首和最后一首的后一首等特殊情况处理,在切换音乐后在 listview 列表视图中定位正在播放的音乐,使在播放的音乐必定在列表的可见范围中,利用 MusicUtil 的静态 changeMusicState 方法启动后台的音
28、乐服务(若已存在则会调用服务的 onStartCommand 方法)。如果音乐播放器的的监听器非空,则调用其的 onMusicClick 方法并将当前播放的音乐信息作为参数传入。4.4 音乐播放模式的切换通过点击列表实现音乐播放模式的切换,利用上下文菜单实现播放模式的切换,使用registerForContextMenu(music_pattern)方法在活动中注册上下文菜单。Overridepublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) super.
29、onCreateContextMenu(menu, v, menuInfo);menu.setHeaderTitle(“播放模式“);menu.add(0, 1, Menu.NONE, “单曲播放“);menu.add(0, 2, Menu.NONE, “单曲循环“);menu.add(0, 3, Menu.NONE, “顺序播放“);menu.add(0, 4, Menu.NONE, “随机播放“);重写 onCreateContextMenu 方法,设置菜单标题,添加单曲播放、单曲循环、顺序播放和随机播放四个菜单项。Overridepublic boolean onContextItemS
30、elected(MenuItem item) switch (item.getItemId()case 1:ToastUtils.show(this, “单曲播放“);music_pattern.setImageResource(R.mipmap.pattern_none);break;case 2:ToastUtils.show(this, “单曲循环“);music_pattern.setImageResource(R.mipmap.pattern_one);break;case 3:ToastUtils.show(this, “顺序播放“);music_pattern.setImageR
31、esource(R.mipmap.pattern_sequence);break;case 4:ToastUtils.show(this, “随机播放“);music_pattern.setImageResource(R.mipmap.pattern_shuffle);break;default:return super.onContextItemSelected(item);return true;图 4-2 播放模式选取重写 onContextItemSelected 方法,使用 case 语句实现菜单项点击的事件。4.5 欢迎界面的实现图 4-3 欢迎界面首先通过自定义 MyPagerA
32、dapter 类继承 PagerAdapter,并重写 getCount()、isViewFromObject(View arg0, Object arg1)、instantiateItem(ViewGroup container, int position)、destroyItem(ViewGroup container, int position, Object object)方法。然后关联 ViewInject 库,创建指示器对象 mIndicato,调用其 setViewPager(viewPager)方法,并在指示器 mIndicato 上设置 OnPageChangeListene
33、r 监听器,重写 onPageSelected(int position)、onPageScrolled(int position, float positionOffset,int positionOffsetPixels)、 onPageScrollStateChanged(int state)方法,由于 onPageSelected()方法只会在页数更改的时候调用,所以在其中编写if (position = listImg.size() - 1) button.setVisibility(View.VISIBLE); else button.setVisibility(View.GONE
34、);使进入主程序的按钮只有在欢迎界面最后一页可见。5 总结经过 1 个月的开发,我的毕业设计终于实现了,这是对我大学生涯的一个阶段性总结,是对大家的一个汇报。我的课题是 Android 手机 APP 开发音乐播放器。简易音乐播放器的形成需要各方面的技术配合。在本文中使用 jdk8.0 版本的 Java 开发工具包并以 Android studio 为开发平台工具编写音乐播放器 app,使用了 Android 自带 sqlite 数据库提供简易的数据支持,利用谷歌提供 API17 及以上的应用程序编程接口实现 Android 平台的音乐播放器开发,利用 ContentProvider 包提供的静
35、态方法,在 Android 系统里搜寻媒体音频库,实现本地音乐的扫描,利用 Java 的监听事件实现按钮的点击监听,借助 Android 的四大组件中的 Service 实现音乐的后台播放,避免主线程任务繁多而导致的卡死,提高用户体验。利用 BroadCast Receiver,实现用户播放模式的切换通知。在代码编写中尽量使用单例模式,节省不必要的内存开销,屏蔽对象创建的复杂性,借助持有者模式优化列表。在这次毕业设计的开发设计里,我逐渐了解到了在开发一个简易音频播放器的过程里所要涉及到的各式工具与方法,Android、SQlite 数据库等这些都是我在学校课堂里没有接触过的,让我学习了更多的东
36、西,接触面也广了,提高了开发者的设计能力和思考能力。也让我了解了应该如何书写论文的文档才能够实现规范合理要求。在实现本文所需的音频播放器中遇到了很多的问题,但是自身借助图书馆以及网络中查阅资料、请教指导老师以及同学等方式,这些问题一一得以解决了。虽然由于时间问题此 app 还存在一些功能未能实现,还有一些 bug,但只有在发现 bug,修复 bug 的循环中自己的编程能里才会进步,应用程序才会逐渐完善。参考文献:1 Bruce EckelPresident. Thinking In Java (Fourth Edition)M , MindView, Inc. 241-244.2 靳岩,姚尚朗
37、. Google Android 开发入门与实战M.北京:人民邮电出版社, 2009.7. 3 余志龙,王世江.Google Android SDK 开发范例大全M.北京:人民邮电出版社, 2009.7. 4 李宁.Android/OPhone 开发完全讲义M.中国水利水电出版社,2012.7.5 康德尔.Android 移动应用开发从入门到精通M.出版社: 人民邮电出版社,2010.7.6 E2Ecloud 工作室.深入浅出 Google AndroidM.北京:人民邮电出版社,2009.8.7 李刚.疯狂 Android 讲义M. 电子工业出版社,第 1 版, 2011.6. 8王世江,佘
38、志龙,陈昱勋,郑名杰.Google Android SDK 开发范例大全(第 3 版)M.人民邮电出版,2011.11.9 杨文志编著. Google Android 程序设计指南M.北京:电子工业出版社 2009.10.10 XML 解析方式 DOM、SAX 之比较.http:/ Connor JMO,Tremblay MThe Java Virtual Machine in HardwareJ.IEEE Micro,1997, 17(2):45-56.致谢本次毕业论文的完成是对我大学四年的的一个验收,首先要感谢我的指导导师 xx 副教授。,在王老师身上我不仅学到了很多知识,更让我避免在卡在死胡同里出不来的情况,本人借此机会对 xx 老师的辛勤教导表示由衷的感谢。于此同时我还要感谢我所有的任课老师,他们教给了我很多知识;还要感谢那些在毕业设计期间帮助我更好完成了课题研究的朋友们。虽然此次毕业设计的实现仍不完美,但正是因为有了你们的指导与帮助,我的设计才能够更加合理,更加贴近需求,我才能够顺利的完成此次毕业设计。