《嵌入式高级编程》大作业HIHEIMUSIC学院:计算机与信息工程学院班级:计算机与科学技术系学号:201320721061姓名:杨建利HIHEIMUSIC摘要使用Java语言,利用Eclipse和AndroidSDK开发工具,完成对Android版本的音乐播放器的开发。开发中使用ContentProvider获取音乐信息,利用Service+MediaPlayer完成音乐的播放,最后在界面中使用intent完成界面的跳转中的信息传递。主要实现歌曲的播放,进度控制以及来去电话时候对歌曲的自动暂停操作功能,最后使用自定义歌词组件完成歌词对歌曲的同步显示。关键词:Android、Service、MediaPlayer、ContentProvider目录1.引言........................................................................................................41.1项目介绍.......................................................................................41.2开发环境.......................................................................................42.系统需求分析.......................................................................................42.1用户需求.......................................................................................42.2功能需求.......................................................................................43.系统总体设计.......................................................................................43.1功能划分(系统总体框架).......................................................53.2功能说明.......................................................................................53.3系统数据流程图...........................................................................63.4数据流程说明...............................................................................73.5界面布局设计.............................................................................83.6界面切换描述.............................................................................94.系统详细设计.....................................................................................104.1结构设计...................................................................................104.2函数设计.................................................................................115.系统实现..............................................................................................195.1运行结果...................................................................................196.结论.....................................................................................................217.参考文献..............................................................................................211.引言1.1项目介绍由于学习Android中的各种控件,机制以及完成课程设计的要求。所以,制作该音乐播放器。1.2开发环境Windows7系统下,使用Eclipse+ADT(Android4.2.2)+JavaJDK开发环境。2.系统需求分析2.1用户需求(1)查看手机上的歌曲(2)点击播放歌曲(3)对歌曲进行播放/暂停/上一曲/下一曲/播放模式以及进度实时显示以及控制(4)播放歌曲同时同步滚动显示歌词2.2功能需求(1)一共有两个界面,歌曲信息界面和歌词界面。(2)歌曲信息界面有标题(本地歌曲),中部有歌曲信息(歌曲图标、歌曲名称、时长,歌手名称),底部简单歌曲控制(进度条(允许拖拉控制歌曲进度)、当前歌曲名称、播放/暂停按钮、下一曲)(3)点击当前歌曲名称(底部简单歌曲控制中)跳转到歌词界面(4)歌词界面顶部当前歌曲名称,中部歌词显示,底部控制选项(5)歌词显示要求能够实时同步滚动显示歌词,即演唱到哪句就哪句变为高亮,并且应当在屏幕可见位置,歌词应该有滚动效果,允许用户上下拖拉去查看歌词,并且不会影响歌曲正常播放,最后歌词应该可以自己调整位置,保证用户歌词查看方便。(6)底部控制要求具有播放模式选择(进度条(实时显示歌曲进度,允许用户通过进度条控制歌曲播放进度)、全部循环/单曲循环(共用一个按钮)、上一曲、播放/暂停(共用一个按钮)、下一曲,返回歌曲列表)2.3性能需求获取本地歌曲的时间小于2s,做到歌曲的控制可以实时响应(小于0.5s)。3.系统总体设计3.1功能划分(系统总体框架)音乐播放器歌曲信息界面音乐播放服务(后台)歌词显示界面歌曲信息显示歌曲信息获取歌曲基本控制选中歌曲名称以及点击跳转下一个界面播放/暂停下一曲进度条歌曲名称显示歌词显示控制组件进度条播放模式上一曲播放/暂停下一曲返回列表电话状态监听3.2功能说明3.2.1歌曲信息获取从手机的数据库中找到歌曲的信息,然后封装好。以供其他组件调取。3.2.2歌曲基本控制进度条(SeekBar)进度条保证实时显示(10次/s),更新歌曲播放的进度。通过拖拽进度条可以完成对歌曲的进度的控制。当前歌曲显示当前歌曲的名称(歌曲名太长时自动滚动显示)。点击直接跳转至歌词界面播放/暂停控制按钮对当前歌曲进行播放/暂停控制。并且要求当播放状态时,点击暂停,并且按钮图标进行变化,暂停转向播发状态时也是如此。下一曲按钮点击即播放下一曲,最后一首歌时自动播放第一首。3.2.3歌曲信息显示将获取的歌曲信息,将歌名,时间,歌手的关键信息显示在手机界面上,并且当屏幕装不下时可以滑动手机显示,当点击歌曲所属行时,歌曲播放。3.2.4音乐播放服务实现歌曲的后台播放服务,能够实时相应各种控件对于歌曲播放的控制,并且当界面不可见或者界面切换时不会影响歌曲的播放,播放器退出时,歌曲自动停止。3.2.5歌曲名称显示显示当前正在播放的歌曲名称3.2.6控制组件进度条(SeekBar)进度条保证实时显示(10次/s),更新歌曲播放的进度。通过拖拽进度条可以完成对歌曲的进度的控制。播放模式按钮点击转换播放模式,并且图标改变,并伴随着提示。一共两种播放模式,全部循环以及单曲循环。上一曲按钮点击播放上一曲歌曲,如果当前是第一曲,则自动播放最后一曲。播放/暂停按钮对当前歌曲进行播放/暂停控制。并且要求当播放状态时,点击暂停,并且按钮图标进行变化,暂停转向播发状态时也是如此。下一曲按钮点击即播放下一曲,最后一首歌时自动播放第一首。返回列表按钮点击返回到歌曲信息界面(跟当前界面的back键功能相同)。3.2.7歌词显示能够同步滚动显示当前的歌词。并且可以拖动歌词,从而查看其他的歌词。3.2.8电话状态监听检测当前电话状态,如果是要拨打/接听电话的时候,音乐自动暂停,当电话挂断之后,重新播放歌曲。3.3系统数据流程图程序启动主界面数据存取A歌曲信息显示基本控制控件音乐服务(后台)B歌曲名显示C进度条D播放/暂停E下一曲电话监听G播放模式切换I下一曲H上一曲G暂停F播放L进度更新K歌词显示更新基本控制服务实时更新服务歌词界面数据存取点击执行M标题N歌词显示歌曲控制R播放模式切换Q下一曲P上一曲O播放S进度条U返回上一层BDKL拖拽执行点击执行F/G当前按钮播放状态,则执行暂停反之亦然IF点击操作F/G根据当前状况选择操作主界面点击操作KLG拖拽操作点击操作IFHFF/G当前按钮播放状态,则执行暂停反之亦然点击操作点击操作在主界面点击返回键退出,其他界面点击则返回上一层返回键点击返回主界面返回键3.4数据流程说明在流程图中出现的所有的模块,一共分为两类(1)可见的控制模块(2)不可见的服务控制模块可见的控制模块与用户进行交互,调取相应的不可见的服务控制模块,从而实现对整个音乐服务的控制。数据流前提要求:每次进入新界面,需要对当前可见的模块的状态的更新,信息从Application的全局类中获取。每次通过控件去控制服务时都需要去更新全局变量。每个控件都处于等待用户操作状态歌词与进度条以及时间显示标签属于实时更新,全部属于一个线程当中。主要数据流程如下:进入软件主界面(歌曲信息界面)对当前各种组件进行更新根据用户操作完成对音乐播放服务的基本控制点击到歌词名组件时进入歌词界面对界面各种组件进行更新各种组件等待用户进行控制点击返回按钮返回上层进入软件主界面(歌曲信息界面)对当前各种组件进行更新点击退出(back)弹出对话框杀死服务进程退出软件3.5界面布局设计布局1:软件主界面咸鱼M咸鱼04:36阿信本地音乐咸鱼04:36阿信咸鱼04:36阿信布局2:歌词界面咸鱼我是一只咸鱼不想承认,也不想否认本地音乐01:3503:393.6界面切换描述点击在界面1下方的播放按钮旁边的歌词的显示,然后直接会跳转到歌词界面。4.系统详细设计4.1结构设计文件结构[1]No.文件夹描述1src存放本软件的所有源代码appclass.java全局变量类AudioUtils.java音乐文件获取类LyricObject.java歌词类LyricView.java歌词显示组件类MainActivity.java主界面类MediaInfomation.java歌曲信息抽象类MusicService.java歌曲播放服务类Play_Activity.java歌词界面类Play_Menu_Layout.java主界面中的控制组件类2genADT插件自动生成的代码文件保存路径以及资源IDBuildConfig.javaR.java3Android.4.2.2安卓版本4assert大型资源文件(暂无)5res本项目中所有的资源文件6res/drawable-hdpi所有的图标文件