为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于android平台的音乐播放器的设计与实现

2018-04-28 24页 doc 170KB 46阅读

用户头像

is_574951

暂无简介

举报
基于android平台的音乐播放器的设计与实现基于android平台的音乐播放器的设计与实现 学校代码: 10128 学 号: 200920201076 嵌入式系统综合设计说明书 题 目:基于Android的音乐播放器设计与实现 姓 名: 学 院:信息工程学院 班 级: 指导教师: 2012 年9 月24 日 摘 要 Android是一种以Linux为基础的开放源代码操作系统,本文就android平台下设计和实现音乐播放器,利用java语言和Eclipse编程工具实现。通过设计能够实现音乐的播放、暂停、上一曲、下一曲、音乐列表、声音控制、帮助菜单等...
基于android平台的音乐播放器的设计与实现
基于android平台的音乐播放器的设计与实现 学校代码: 10128 学 号: 200920201076 嵌入式系统综合设计说明书 题 目:基于Android的音乐播放器设计与实现 姓 名: 学 院:信息工程学院 班 级: 指导教师: 2012 年9 月24 日 摘 要 Android是一种以Linux为基础的开放源代码操作系统,本文就android平台下设计和实现音乐播放器,利用java语言和Eclipse编程工具实现。通过设计能够实现音乐的播放、暂停、上一曲、下一曲、音乐列表、声音控制、帮助菜单等功能,通过对基于android平台下的播放器的设计,了解音乐播放器的设计的原理和实现的相关技术,掌握了android编程思想以及基本的应用组件,对以后从事android开发有很大的帮助。 关键词:android;音乐播放器;嵌入式;java II Abstract Android 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 based design, and to understand the principle player in android platform- 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; java III 目 录 摘 要.............................................................. II Abstract.......................................................... III 目 录.............................................................. 1 第一章 总体功能介绍................................................. 1 1.1 功能介绍 ........................................................................................................................... 1 1.11 各功能模块图 ......................................................................................................... 1 1.12设计思想 .................................................................................................................. 2 1.2 系统结构用例图 ............................................................................................................... 2 第二章 详细设计及功能实现........................................... 4 2.1 播放器界面的设计 ........................................................................................................... 4 2.2 播放动画的设计 ............................................................................................................... 5 2.3 各模块详细设计 ............................................................................................................... 5 2.31 声音控制模块 ......................................................................................................... 6 2.32 播放暂停模块 ......................................................................................................... 8 2.34 上一曲\下一曲模块 ............................................................................................... 8 2.34 音乐播放列表模块 ................................................................................................. 9 2.35 系统帮助模块 ....................................................................................................... 12 第三章 调试及运行结果.............................................. 14 3.1 实验测试问题 ................................................................................................................. 14 3.2 实验调试 ......................................................................................................................... 14 第四章 总 结...................................................... 15 4.1 遇到的问题 ..................................................................................................................... 15 4.2 解决方法 ......................................................................................................................... 15 4.3 收获体会 ......................................................................................................................... 15 参考文献........................................................... 16 第一章 总体功能介绍 1.1 功能介绍 设计的音乐播放器是基于android平台下的,能够实现音乐的播放、暂停、快进、快退、上一曲、下一曲、声音控制、播放列表,播放时间以及播放列表。通过播放列表,用户可以选择播放的音乐,播放器也可以显示该音乐的歌曲名、专辑、歌手以及歌曲的播放总时间,播放进度等歌曲的相关功能;用户还可以通过音乐增减按钮调节声音大小,还可以选择循环播放和顺序播放;该音乐播放器能够将将sd卡中的MP3格式的音乐文件进行查找和播放;用户可以通过系统帮助退出系统、更新播放列表、设置、帮助等功能。 1.11 各功能模块图 Android音乐播放器 声音控制 播放\暂停 上一曲\下一曲 音乐文件 播放列表 图1.11 音乐播放器模块图 1 1.12设计思想 首先,搭建android平台,通过Eclipse以及环境变量的配置搭建android平台,实现手机模拟器然后搭建音乐播放器的界面,通过使用android的组件,将相关的动作按钮通过启动StartIntent()方法来使各组件进行跳转,实现音乐播放器的功能,其具体的实现采用java语言。 图1.12 搭建模拟器图 1.2 系统结构用例图 根据音乐播放器的功能设计,UML用例图更直观的反映了用户对该软件的需求,通过用例特征的分析,又用例模型抽象出该软件为用户的功能,以及详细的叙述,音乐播放器系统的用例图如下: 2 音乐播放器系统 播放 退出软件暂停 上一曲 音量 播放文件 系统帮助 图1.2 音乐播放器功能用例图 播放清单显示sd卡中的音乐文件里表,其用例图如下图所示: 音乐播放器列表 播放 返回 删除 图1.21 音乐播放器播放列表功能用例图 3 第二章 详细设计及功能实现 2.1 播放器界面的设计 先实现播放页面的 (包括各种控制按钮和专辑图片) 布局代码 main.xml 以及播放列表的界面设计playlist.xml文件。 图2.1 播放界面和播放列表界面 其中播放按钮、暂停、上一曲、下一曲、声音按钮采用xml文件,在按下和得到焦点的时候会做相应的改变,关键代码如下: 4 2.2 播放动画的设计 有两个动画文件log.xml和log_two.xml文件,当动画结束时 启动另外一 个activity动画特效是两个imageView同时采用 淡入,旋转和,缩放的特效其调 入动画关键代码为: Animation animation=AnimationUtils.loadAnimation(Logo.this, R.anim.logo); Animation animation2=AnimationUtils.loadAnimation(Logo.this, R.anim.logo_two); 图2.2播放动画界面 2.3 各模块详细设计 音乐播放器包括声音控制模块,上一曲\下一曲,播放,暂停,播放列表, 系统帮助等几个模块。 5 2.31 声音控制模块 声音有两个按钮控制,一个增加声音和一个减少声音。通过这两个按钮用户可以调节播放音乐的声音大小,使用AudioManager组件对声音的大小进行增减,最大为7,最小为0。当用户点击声音按钮时,若是增按钮,对声音进行增加;若是减按钮对声音进行减小。 图2.31 声音控制图 关键代码如下: 获取点击事件 voiceUp = (ImageButton)findViewById(R.id.music_voic_up); // 音量 增加 voiceDown = (ImageButton)findViewById(R.id.music_voic_down); // 音量 增减小 执行事件 audiomanage = (AudioManager) getSystemService(Context.AUDIO_SERVICE); voiceDown.setOnClickListener(new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub audiomanage.adjustVolume(AudioManager.ADJUST_LOWER, 0); volume = audiomanage.getStreamVolume(AudioManager.STREAM_RING); if(volume>0){ volume--; audiomanage.setRingerMode(volume); } } }); 6 // 声音控制按钮,声音增加 voiceUp.setOnClickListener(new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub audiomanage.adjustVolume(AudioManager.ADJUST_RAISE, 0); volume = audiomanage.getStreamVolume(AudioManager.STREAM_RING); if(volume<7){ volume++; audiomanage.setRingerMode(volume); } } }); 声音控制的程序流程图: 开始 N 单击事件, YN 获取系统当前声音声音增, YY 声音是否为0,获取系统当前声音 N 声音volume减1声音是否为7, Y N 声音volume加1 结束 图2.311 声音控制流程图 7 2.32 播放暂停模块 当用户点击播放\暂停按钮时,播放器就对当前播放事件监听,从而控制当前音乐的播放\暂停,其界面图如图2.31所示,关键代码如下: //播放按钮 playPauseBtn.setOnClickListener(new OnClickListener() { public void onClick(View v) { int cmd = 0; Intent i = new Intent(MusicService.MUSIC_CONTROL); //判断当前的状态值是什么状态 如果是播放状态 if (status == MusicService.STATUS_PLAYING) { cmd = MusicService.CMD_PAUSE;//发送暂停的命令 } else if (status == MusicService.STATUS_STOPPED) { cmd = MusicService.CMD_START;//发送播放的命令 } else { cmd = MusicService.CMD_RESUME;//继续播放的命令 } i.putExtra("cmd", cmd);//将命令广播出去 sendBroadcast(i);//发送广播 } }); 2.34 上一曲\下一曲模块 当用户点击上一曲\下一曲按钮时,播放器就对当前播放事件监听,从音乐列表中转换音乐,从而控制当前音乐的上一曲\下一曲,其界面图如图2.31所示,关键代码如下: //上一曲键事件监听器 previousbtn.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent i = new Intent(MusicService.MUSIC_CONTROL); int cmd = MusicService.CMD_PREV;//发送前一首的命令 i.putExtra("cmd", cmd); sendBroadcast(i); } }); // 下一曲键事件监听器 nextBtn.setOnClickListener(new OnClickListener() { public void onClick(View v) { 8 Intent i = new Intent(MusicService.MUSIC_CONTROL); int cmd = MusicService.CMD_NEXT; i.putExtra("cmd", cmd); sendBroadcast(i); } }); //设置SeekBar的监听事件 sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { //当停止拖动时调用的方法 public void onStopTrackingTouch(SeekBar seekBar) { } public void onStartTrackingTouch(SeekBar seekBar) { } //当SeekBar拖动时会执行此方法 public void onProgressChanged(SeekBar seekBar, int prog, boolean fromUser) {//fromUser参数意思是判断拖动是否是用户用手拖动的 if (fromUser == true && Math.abs(prog - progress) >= 5) { progress = prog; Intent i = new Intent(MusicService.MUSIC_CONTROL); int cmd = MusicService.CMD_SEEK;//发送拖动的命令 i.putExtra("cmd", cmd); i.putExtra("progress", progress);//讲拖动的进度传进Service sendBroadcast(i); sb.setProgress(progress); } } }); } 2.34 音乐播放列表模块 音乐播放列表由activity组件是实现,能够对当前android手机模拟器sd卡中MP3音乐文件进行读取和显示,包括歌曲名、专辑、歌曲时间以及歌手名。用户可以选择想要播放的音乐对其播放。 其关键代码如下: private List> getMultiData() { List> musicList = new ArrayList>(); System.out.println(musicList + "0"); 9 // 循环找出所有的歌曲和信息 ContentResolver resolver = this.getContentResolver(); Cursor musicCursor = resolver.query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,null); int musicColumnIndex; // 遍历游标内容 if (null != musicCursor && musicCursor.getCount() > 0) { for (musicCursor.moveToFirst(); !musicCursor.isAfterLast(); musicCursor.moveToNext()) { Map musicDataMap = new HashMap();// 取得音乐的名字 musicColumnIndex = musicCursor .getColumnIndex(MediaStore.Audio.AudioColumns.TITLE); musicName = musicCursor.getString(musicColumnIndex); musicDataMap.put("musicName", musicName); musicColumnIndex = musicCursor .getColumnIndex(MediaStore.Audio.AudioColumns.ALBUM); musicAlbum = musicCursor.getString(musicColumnIndex); musicDataMap.put("musicAlbum", musicAlbum); musicColumnIndex = musicCursor .getColumnIndex(MediaStore.Audio.AudioColumns.ARTIST); musicArtist = musicCursor.getString(musicColumnIndex); musicDataMap.put("musicArtist", musicArtist); musicColumnIndex = musicCursor .getColumnIndex(MediaStore.Audio.AudioColumns.DURATION); musicDuration = musicCursor.getString(musicColumnIndex); musicDataMap.put("musicdurction", musicDuration); // 取得歌曲对应的专辑Key 这里由于专辑图片太占内存 就不在播放列表 上显示了 musicColumnIndex = musicCursor .getColumnIndex(MediaStore.Audio.AudioColumns.ALBUM_KEY); musicAlbumKey = musicCursor.getString(musicColumnIndex); String[] argArr = { musicAlbumKey }; ContentResolver albumResolver = this.getContentResolver(); Cursor albumCursor = albumResolver.query( MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, null, MediaStore.Audio.AudioColumns.ALBUM_KEY + " = ?", argArr, null); if (null != albumCursor && albumCursor.getCount() > 0) { albumCursor.moveToFirst(); int albumArtIndex = albumCursor .getColumnIndex(MediaStore.Audio.AlbumColumns.ALBUM_ART); musicAlbumArtPath = albumCursor.getString(albumArtIndex); 10 if (null != musicAlbumArtPath) { musicDataMap .put("musicAlbumArtPath", musicAlbumArtPath); } else { musicDataMap.put("musicAlbumArtPath", R.drawable.icon); } } else { musicDataMap.put("musicAlbumArtPath", R.drawable.icon); } albumCursor.close(); musicList.add(musicDataMap); } musicCursor.close(); } return musicList; } 音乐列表截图如下: 图2.34 音乐播放器列表 11 2.35 系统帮助模块 系统帮助主要为用户提供使用软件的帮助功能,包括设置、帮助、列表、退出、刷新曲库等功能。其截图如下: 图2.35 系统帮助模块 关键代码如下: public boolean onCreateOptionsMenu(Menu menu) { menu.add(Menu.NONE, Menu.FIRST + 1, 5, "刷新曲库").setIcon( android.R.drawable.ic_menu_search); menu.add(Menu.NONE, Menu.FIRST + 2, 6, "退出").setIcon( android.R.drawable.ic_menu_set_as); menu.add(Menu.NONE, Menu.FIRST + 3, 2, "帮助").setIcon( android.R.drawable.ic_menu_help); menu.add(Menu.NONE, Menu.FIRST + 4, 1, "列表").setIcon( android.R.drawable.ic_menu_agenda); menu.add(Menu.NONE, Menu.FIRST + 5, 4, "关于").setIcon( android.R.drawable.ic_menu_info_details); menu.add(Menu.NONE, Menu.FIRST + 6, 3, "设置").setIcon( android.R.drawable.ic_menu_preferences); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { 12 //这里的Menu.FIRST是一个常量 Id的标示 //根据得到的ID判断 当前那个菜单项被点中 case Menu.FIRST + 1: Toast.makeText(this, "正在刷新歌曲...", Toast.LENGTH_SHORT).show(); break; case Menu.FIRST + 2: finish(); Toast.makeText(this, "退出...", Toast.LENGTH_SHORT).show(); break; case Menu.FIRST + 3: , "此功能暂未开放", Toast.LENGTH_SHORT).show(); Toast.makeText(this break; case Menu.FIRST + 4://跳转到播放列表 Intent setIntent = new Intent(PlayActivity.this, Musiclist.class); PlayActivity.this.startActivity(setIntent); break; case Menu.FIRST + 5: String showtxt = "帮助文件丢失~"; InputStream is; try { is = getAssets().open("readme.txt"); int size = is.available(); byte[] buffer = new byte[size]; is.read(buffer); is.close(); showtxt = new String(buffer, "utf-8"); } catch (IOException e) { throw new RuntimeException(e); } new CustomDialog(PlayActivity.this, CustomDialog.DIALOG_DETAILS, "关于", showtxt).show(); break; case Menu.FIRST + 6: Toast.makeText(this, "此功能暂未开放", Toast.LENGTH_SHORT).show(); break; } return false; } 13 第三章 调试及运行结果 3.1 实验测试问题 实验主要读错误提示进行调试,在课设中主要出现的错误时“系统异常,强制终止”如下图所示 图3.1 异常终止 3.2 实验调试 大多数时间出现如上所示的情况,这是我们需要对LogCat查看错误,课设中曾经常出现的是内存空间已满,需要释放进程空间,以导致出现程序运行时出现图 3.1所示的现象,所以,当出现错误时,我们必须查看错在哪儿,然后改正。 图3.2 调试截图 14 第四章 总 结 4.1 遇到的问题 由于对android的接触较少,所以也遇到了一些问题,无论是哪种语言首先要有自己的思路,接下来就是通过语言的实现。我主要遇到android的四大组件的理解和使用,刚开始不知道如何用相关的组件,而且android的组件相当的多,就老师上课讲的相关知识比较少,对于我们初学者学习比较困难,而且,只是不是那么的连贯和详细,上课的时间只是跟上老师再敲代码,实现一个具体的功能,但是不有真正的弄懂它的使用方法,所以,我们在课设中出现很多问题。 4.2 解决方法 由于android是用java语言编写的,自己学习java还比较可以,语言不是主要的问题,主要的问题就是android那四个组件的使用和理解,对于老师课堂上没有讲清楚的我下来主要是采用网上查找资料和自己到图书馆查阅相关的书籍,对于其一些接口查阅android的相关API接口文档,通过自己慢慢地实现一个个的功能理解和消化相关的知识,对于解决不了的问题,向老师和同学们求助,然后自己在一点点的理解。 4.3 收获体会 通过这次三周的课程设计,让我更加全面的复习和掌握了java语言,对android编程知识有了基本的认识和了解,基本掌握了android的四大组件的相关知识,虽然自己以前没有接触过android,但是系统的学习过java语言,对语言知识有一定的理解,但是,android中相关组件和接口非常的繁琐和多,所以,对于初学者不可能一下子全部的掌握所有组件以及接口,但是,通过这三周设计播放器和通讯录,让我明白了android平台和知识的基本使用,虽然设计中遇到了很多的问题,但是通过网上查阅和图书馆介于相关的书籍弄懂了自己不会的知识。自然学习任何语言和新知识,都会有疑问和困难,所以,自己必须通过查阅相关知识自己解决。 所以,我觉的这次课设非常有意义,虽然,短短的三周不可能真正的掌握android相关的知识,但是,通过这次课设,让我们接触了社会比较前沿的编程知识,为即将毕业的我们找工作有了一定的帮助,也为以后从事android打下一个小小的基础。 15 参考文献 [1] 李宁(Android应用开发实战(北京(机械工业出版社(2012 [2] 高彩丽(Android应用开发范例精解(北京(清华大学出版社(2012 [3] 李宁(Android开发完全讲义(北京(中国水利水电出版社(2012 [4] 张元亮(Android开发应用实战详解(北京(中国铁道出版社(2011 16
/
本文档为【基于android平台的音乐播放器的设计与实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索