资源描述
. . . 学校代码: 10128学 号: 200920201076嵌入式系统综合设计说明书题 目:基于Android的音乐播放器设计与实现姓 名: 学 院:信息工程学院班 级: 指导2012 年9 月24 日摘 要Android是一种以Linux为基础的开放源代码操作系统,本文就android平台下设计和实现音乐播放器,利用java语言和Eclipse编程工具实现。通过设计能够实现音乐的播放、暂停、上一曲、下一曲、音乐列表、声音控制、帮助菜单等功能,通过对基于android平台下的播放器的设计,了解音乐播放器的设计的原理和实现的相关技术,掌握了android编程思想以及基本的应用组件,对以后从事android开发有很大的帮助。关键词:android;音乐播放器;嵌入式;javaAbstractAndroid is a Linux-based open-source operating system, this article on the android platform design and realization of the music player, the use of the Java language and the Eclipse programming tools. Can be achieved through the design of the music playback, pause, previous song, next song, music list, sound control, the Help menu and other functions through the principle player in android platform-based design, and to understand the design of the music player realization of the related technology, to master the android programming ideas, as well as basic application components, great help later in the android development.Keywords: android; music player; embedded; java16 / 21目 录摘要IIAbstractIII目录1第一章总体功能介绍11.1 功能介绍11.11 各功能模块图11.12设计思想21.2 系统结构用例图2第二章详细设计及功能实现42.1 播放器界面的设计42.2 播放动画的设计52.3 各模块详细设计52.31 声音控制模块62.32 播放暂停模块82.34 上一曲下一曲模块82.34 音乐播放列表模块92.35 系统帮助模块12第三章调试及运行结果143.1 实验测试问题143.2 实验调试14第四章总结154.1 遇到的问题154.2 解决方法154.3 收获体会15参考文献16第一章 总体功能介绍1.1 功能介绍设计的音乐播放器是基于android平台下的,能够实现音乐的播放、暂停、快进、快退、上一曲、下一曲、声音控制、播放列表,播放时间以及播放列表。通过播放列表,用户可以选择播放的音乐,播放器也可以显示该音乐的歌曲名、专辑、歌手以及歌曲的播放总时间,播放进度等歌曲的相关功能;用户还可以通过音乐增减按钮调节声音大小,还可以选择循环播放和顺序播放;该音乐播放器能够将将sd卡中的MP3格式的音乐文件进行查找和播放;用户可以通过系统帮助退出系统、更新播放列表、设置、帮助等功能。1.11 各功能模块图Android音乐播放器声音控制上一曲下一曲音乐文件播放列表播放暂停图1.11 音乐播放器模块图1.12设计思想首先,搭建android平台,通过Eclipse以及环境变量的配置搭建android平台,实现手机模拟器然后搭建音乐播放器的界面,通过使用android的组件,将相关的动作按钮通过启动StartIntent方法来使各组件进行跳转,实现音乐播放器的功能,其具体的实现采用java语言。图1.12 搭建模拟器图1.2 系统结构用例图根据音乐播放器的功能设计,UML用例图更直观的反映了用户对该软件的需求,通过用例特征的分析,又用例模型抽象出该软件为用户的功能,以及详细的叙述,音乐播放器系统的用例图如下:图1.2 音乐播放器功能用例图播放清单显示sd卡中的音乐文件里表,其用例图如下图所示:图1.21 音乐播放器播放列表功能用例图第二章 详细设计及功能实现2.1 播放器界面的设计先实现播放页面的 布局代码 main.xml以及播放列表的界面设计playlist.xml文件。图2.1 播放界面和播放列表界面其中播放按钮、暂停、上一曲、下一曲、声音按钮采用xml文件,在按下和得到焦点的时候会做相应的改变,关键代码如下:2.2 播放动画的设计有两个动画文件log.xml和log_two.xml文件,当动画结束时 启动另外一个activity动画特效是两个imageView同时采用 淡入,旋转和,缩放的特效其调入动画关键代码为:Animationanimation=AnimationUtils.loadAnimation;Animation animation2=AnimationUtils.loadAnimation;图2.2播放动画界面2.3 各模块详细设计音乐播放器包括声音控制模块,上一曲下一曲,播放,暂停,播放列表,系统帮助等几个模块。2.31 声音控制模块声音有两个按钮控制,一个增加声音和一个减少声音。通过这两个按钮用户可以调节播放音乐的声音大小,使用AudioManager组件对声音的大小进行增减,最大为7,最小为0。当用户点击声音按钮时,若是增按钮,对声音进行增加;若是减按钮对声音进行减小。图2.31 声音控制图关键代码如下:获取点击事件voiceUp = findViewById; / 音量 增加voiceDown = findViewById; / 音量 增减小执行事件audiomanage = getSystemService;voiceDown.setOnClickListenernew OnClickListener publicvoid onClick / TODO Auto-generated method stubaudiomanage.adjustVolume;volume = audiomanage.getStreamVolume;if0volume-;audiomanage.setRingerMode;/ 声音控制按钮,声音增加voiceUp.setOnClickListenernew OnClickListener publicvoid onClick / TODO Auto-generated method stubaudiomanage.adjustVolume;volume = audiomanage.getStreamVolume;ifvolumevolume+;audiomanage.setRingerMode;声音控制的程序流程图:图2.311 声音控制流程图2.32 播放暂停模块当用户点击播放暂停按钮时,播放器就对当前播放事件监听,从而控制当前音乐的播放暂停,其界面图如图2.31所示,关键代码如下:/播放按钮playPauseBtn.setOnClickListenernew OnClickListener publicvoid onClick int cmd = 0;Intent i = new Intent;/判断当前的状态值是什么状态 如果是播放状态if cmd = MusicService.CMD_PAUSE;/发送暂停的命令 elseif cmd = MusicService.CMD_START;/发送播放的命令 else cmd = MusicService.CMD_RESUME;/继续播放的命令i.putExtra;/将命令广播出去sendBroadcast;/发送广播 ;2.34 上一曲下一曲模块当用户点击上一曲下一曲按钮时,播放器就对当前播放事件监听,从音乐列表中转换音乐,从而控制当前音乐的上一曲下一曲,其界面图如图2.31所示,关键代码如下:/上一曲键事件监听器previousbtn.setOnClickListenernew OnClickListener publicvoid onClick Intent i = new Intent;int cmd = MusicService.CMD_PREV;/发送前一首的命令i.putExtra;sendBroadcast;/ 下一曲键事件监听器nextBtn.setOnClickListenernew OnClickListener publicvoid onClick Intent i = new Intent;int cmd = MusicService.CMD_NEXT;i.putExtra;sendBroadcast;/设置SeekBar的监听事件sb.setOnSeekBarChangeListenernew OnSeekBarChangeListener /当停止拖动时调用的方法publicvoid onStopTrackingTouch publicvoid onStartTrackingTouch /当SeekBar拖动时会执行此方法publicvoid onProgressChanged /fromUser参数意思是判断拖动是否是用户用手拖动的if fromUser = true & Math.abs = 5 progress = prog;Intent i = new Intent;int cmd = MusicService.CMD_SEEK;/发送拖动的命令i.putExtra;i.putExtra;/讲拖动的进度传进ServicesendBroadcast;sb.setProgress;2.34 音乐播放列表模块音乐播放列表由activity组件是实现,能够对当前android手机模拟器sd卡中MP3音乐文件进行读取和显示,包括歌曲名、专辑、歌曲时间以及歌手名。用户可以选择想要播放的音乐对其播放。其关键代码如下:private ListMap getMultiData ListMap musicList = new ArrayListMap;System.out.println;/ 循环找出所有的歌曲和信息ContentResolver resolver = this.getContentResolver;Cursor musicCursor = resolver.query;int musicColumnIndex;/ 遍历游标容if null != musicCursor & musicCursor.getCount 0 for musicCursor.moveToFirst; !musicCursor.isAfterLast; musicCursor.moveToNext Map musicDataMap = new HashMap;/ 取得音乐的名字musicColumnIndex = musicCursor.getColumnIndex;musicName = musicCursor.getString;musicDataMap.put;musicColumnIndex = musicCursor.getColumnIndex;musicAlbum = musicCursor.getString;musicDataMap.put;musicColumnIndex = musicCursor.getColumnIndex;musicArtist = musicCursor.getString;musicDataMap.put;musicColumnIndex = musicCursor.getColumnIndex;musicDuration = musicCursor.getString;musicDataMap.put;/ 取得歌曲对应的专辑Key 这里由于专辑图片太占存 就不在播放列表上显示了musicColumnIndex = musicCursor.getColumnIndex;musicAlbumKey = musicCursor.getString;String argArr = musicAlbumKey ;ContentResolver albumResolver = this.getContentResolver;Cursor albumCursor = albumResolver.query;if null != albumCursor & albumCursor.getCount 0 albumCursor.moveToFirst;int albumArtIndex = albumCursor.getColumnIndex;musicAlbumArtPath = albumCursor.getString;if musicDataMap.put; else musicDataMap.put; else musicDataMap.put;albumCursor.close;musicList.add;musicCursor.close;return musicList;音乐列表截图如下:图2.34 音乐播放器列表2.35 系统帮助模块系统帮助主要为用户提供使用软件的帮助功能,包括设置、帮助、列表、退出、刷新曲库等功能。其截图如下:图2.35 系统帮助模块关键代码如下: publicboolean onCreateOptionsMenu menu.add.setIcon;menu.add.setIcon; menu.add.setIcon;menu.add.setIcon;menu.add.setIcon;menu.add.setIcon;returnsuper.onCreateOptionsMenu;Overridepublicboolean onOptionsItemSelected switch item.getItemId /这里的Menu.FIRST是一个常量 Id的标示/根据得到的ID判断 当前那个菜单项被点中case Menu.FIRST + 1:Toast.makeText.show;break;case Menu.FIRST + 2:finish;Toast.makeText.show;break;case Menu.FIRST + 3:Toast.makeText.show;break;case Menu.FIRST + 4:/跳转到播放列表Intent setIntent = new Intent; PlayActivity.this.startActivity;break;case Menu.FIRST + 5:String showtxt = 帮助文件丢失!;InputStream is;try is = getAssets.open;int size = is.available;byte buffer = newbytesize;is.read;is.close;showtxt = new String; catch thrownew RuntimeException;new CustomDialog.show;break;case Menu.FIRST + 6:Toast.makeText.show;break;returnfalse;第三章 调试及运行结果3.1 实验测试问题实验主要读错误提示进行调试,在课设中主要出现的错误时系统异常,强制终止如下图所示图3.1 异常终止3.2 实验调试 大多数时间出现如上所示的情况,这是我们需要对LogCat查看错误,课设中曾经常出现的是存空间已满,需要释放进程空间,以导致出现程序运行时出现图3.1所示的现象,所以,当出现错误时,我们必须查看错在哪儿,然后改正。图3.2 调试截图第四章 总 结4.1 遇到的问题由于对android的接触较少,所以也遇到了一些问题,无论是哪种语言首先要有自己的思路,接下来就是通过语言的实现。我主要遇到android的四大组件的理解和使用,刚开始不知道如何用相关的组件,而且android的组件相当的多,就老师上课讲的相关知识比较少,对于我们初学者学习比较困难,而且,只是不是那么的连贯和详细,上课的时间只是跟上老师再敲代码,实现一个具体的功能,但是不有真正的弄懂它的使用方法,所以,我们在课设中出现很多问题。4.2 解决方法由于android是用java语言编写的,自己学习java还比较可以,语言不是主要的问题,主要的问题就是android那四个组件的使用和理解,对于老师课堂上没有讲清楚的我下来主要是采用网上查找资料和自己到图书馆查阅相关的书籍,对于其一些接口查阅android的相关API接口文档,通过自己慢慢地实现一个个的功能理解和消化相关的知识,对于解决不了的问题,向老师和同学们求助,然后自己在一点点的理解。4.3 收获体会通过这次三周的课程设计,让我更加全面的复习和掌握了java语言,对android编程知识有了基本的认识和了解,基本掌握了android的四大组件的相关知识,虽然自己以前没有接触过android,但是系统的学习过java语言,对语言知识有一定的理解,但是,android中相关组件和接口非常的繁琐和多,所以,对于初学者不可能一下子全部的掌握所有组件以及接口,但是,通过这三周设计播放器和通讯录,让我明白了android平台和知识的基本使用,虽然设计中遇到了很多的问题,但是通过网上查阅和图书馆介于相关的书籍弄懂了自己不会的知识。自然学习任何语言和新知识,都会有疑问和困难,所以,自己必须通过查阅相关知识自己解决。所以,我觉的这次课设非常有意义,虽然,短短的三周不可能真正的掌握android相关的知识,但是,通过这次课设,让我们接触了社会比较前沿的编程知识,为即将毕业的我们找工作有了一定的帮助,也为以后从事android打下一个小小的基础。参考文献1 宁Android应用开发实战机械工业20122 高彩丽Android应用开发例精解清华大学20123 宁Android开发完全讲义中国水利水电20124 元亮Android开发应用实战详解中国铁道2011
展开阅读全文