简易音乐播放器报告.doc_第1页
简易音乐播放器报告.doc_第2页
简易音乐播放器报告.doc_第3页
简易音乐播放器报告.doc_第4页
简易音乐播放器报告.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

音乐播放器报告书 项目名称:简易音乐播放器 小组编号:E 小组成员:郭元坤、边东东、 牛孟强、邢棕、王超 目录第1章 项目组详情1第2章 系统需求分析12.1 功能需求12.1.1 播放器的基本控制需求12.1.2 功能需求分析22.2 系统结构图和流程图22.3 系统界面需求3第3章 详细设计33.1 界面设计33.1.1 播放器的进入界面33.1.2 播放器主界面63.2 功能实现73.2.1 播放器音轨的实现73.2.2 播放器播放、暂停等功能83.2.3 数据共享机制10第4章 总结12第1章 项目组详情E组:组长:郭元坤组员:边东东、牛孟强、邢棕、王超小组成员分工情况:组长郭元坤主要研究音乐播放器系统的需求分析兼读取SD信息中的.mp3文件开发。而其它功能实现是由边东东、牛孟强、邢棕、王超来实现的。其各自的负责的主要分工如下:边东东:音乐播放界面和音乐的播放、暂停、上一曲、下一曲,音轨是由我们和边东东、牛孟强实现的。牛孟强:把从SD卡中读取到的.mp3文件通过列表的方式显示在主页上,还有菜单功能的实现。包括退出功能和搜索音乐文件功能邢棕和王超:主要负责音乐播放器系统的“设置”界面和功能实现,包括歌词图片的下载和显示还实现了定时退出的功能。第2章 系统需求分析2.1 功能需求2.1.1 播放器的基本控制需求根据项目的目标,我们们可获得项目系统的基本需求,一下从不同的角度来描述系统的需求,并且使用用户用例图来描述,系统的功能需求,我们们分成两部分来概括,即播放器的基本控制需要,播放器友好界面需求。播 放暂停停止上一曲下一曲在播放器正在运行时,用户单击“播放”按钮,播放器将播放选中的播放列表中的音乐,并同时显示当前进度;当歌曲未暂停或停止时,用户单击“暂停”按钮,播放器将进行暂停状态;播放器正在播放或暂停时,用户单击“停止”按钮,播放器将停止播放或暂停时,用户点击“上一首”或者“下一首”按钮,播放器将播放上一首或下一首歌曲。2.1.2 功能需求分析从时序图中可以看出播放器中信息发送和调用过程主界面点击进入按钮播放列表后台service播放界面选择歌曲播放播放service播进入放列表播放页面发送参数,调用后台service播放,返回播放2.1.3 系统结构图和流程图主界面进入播放页面播放列表是否点击要播放的歌曲音乐播放结束2.1.4 系统界面需求播放器界面要求布局合理,简约,颜色舒适,控制按钮友好,能让用户一眼就能看出各个按钮的作用及操作方法。能实现要求的功能,但又不重复。要考虑到不同手机屏幕大小可能不一样,应尽量兼容大多数手机屏幕尺寸,使之显示无障碍。第3章 详细设计3.1 界面设计3.1.1 播放器的进入界面Android的每一个可视化界面,为了使界面更加美观,在此处运用了老电视关闭动画效果,使其产生动画效果,界面更加友好,代码如下:public boolean onKeyDown(int keyCode, KeyEvent event) if (keyCode = KeyEvent.KEYCODE_BACK) Intent intent = new Intent(LocalPlayMusicActivity.this,LocalTabMusicActivity.class);startActivity(intent);finish();return true;/ 播放音乐protected void play() flag = PLAY;playbtn.setImageResource(R.drawable.pause_button);Intent intent = new Intent();intent.setAction(org.music.service.LocalMusicService);intent.putExtra(op, PLAY);startService(intent);/ 暂停protected void pause() flag = PAUSE;playbtn.setImageResource(R.drawable.play_button);Intent intent = new Intent();intent.setAction(org.music.service.LocalMusicService);intent.putExtra(op, PAUSE);startService(intent);/ 上一首protected void latestOne() if (position = 0) position = _ids.length - 1; else if (position 0) position-;stop();setup();play();/ 停止播放音乐private void stop() Intent intent = new Intent();intent.setAction(org.music.service.LocalMusicService);intent.putExtra(op, STOP);startService(intent);/ 下一首播放音乐protected void nextOne() if (position = _ids.length - 1) position = 0; else if (position _ids.length - 1) position+;stop();setup();play();/ 进度条改变protected void seekbar_change(int progress) Intent intent = new Intent();intent.setAction(org.music.service.LocalMusicService);intent.putExtra(op, PROGRESS_CHANGE);intent.putExtra(progress, progress);startService(intent);3.1.2 播放器主界面Android的每一个可视化界面,都有其唯一的布局配置文件,该文件里面有各种布局方式,和各种资源文件。如:图像,文字,颜色的引用,程序在运行时,可以通过代码对各配置文件进行读取。这样就可以形成不同的可视化界面和炫丽的效果。播放器主界面是一个Activity,Android工程在每次个activity启动的时候会首先执行Oncreate()方法,如下代码:protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);setContentView(R.layout.music_play);该方法执行界面初始化操作,该方法主要执行界面的初始化操作,Activity有个设置布局的方法:Context.setContentView(layoutResID),参数为资源ID,该Id在工程目录res/layout下,主界面布局文件名为MusicPlay。下面是music_play.xml布局文件代码结构如下: 在相对布局下嵌套了两个相对布局,第一个实现歌曲基本信息的显示,其中用来显示专辑图片,用来显示播放歌曲时的进度条,另一个则用来显示上一曲,开始/暂停,下一曲等按钮。3.2 功能实现3.2.1 播放器音轨的实现不管是从界面外观还是从功能上,系统自带的SeekBar往往不能满足用户的需要。所以我们在这里自定义了一个音轨SeekBar,在MusicPlay.xml配置文件中,SeekBar的代码如下:上述代码中有参数android:thumb=drawable/progress_dot为音轨游标的图片资源,android:progressDrawable=drawable/seekbar_style为SeekBar条的风格style。引用了drawable中的seekbar_style.xml文件,seekBar.xml是自定义的配置文件,代码如下:音轨对象SeekBar在歌曲刚开始的时候调用方法SeekBar.setMax(),seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() public void onStopTrackingTouch(SeekBar seekBar) public void onStartTrackingTouch(SeekBar seekBar) public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) if (MusicService.mplayer != null) if (fromUser) MusicService.mplayer.seekTo(progress);play_time.setText(mAdapter.toTime(progress); else seekBar.setMax(0););3.2.2 播放器播放、暂停等功能各按钮水平放置,用的是布局中的线性布局LinearLayout,LinearLayout中依次放置上一曲、开始/暂停、下一曲、声音按钮属性。配置文件代码结构如下:android的媒体播放原理:android源程序已经为我们们封装好了一个接口类,叫MusicService。该接口在执行行需要一个数据源,在此初始化对象:/* * 初始化媒体对象 * * param mp3Path */public void initMediaSource(String mp3Path) Uri mp3Uri = Uri.parse(mp3Path);if (mplayer != null) mplayer.stop();mplayer.reset();mplayer = null;mplayer = MediaPlayer.create(this, mp3Uri);mplayer.setOnCompletionListener(this);mLrcRead=new MusicLrc();进行播放和暂停功能的设置,在音乐播放的过程中才可以对播放器进行暂停的操作代码如下:protected void play() flag = PLAY;playbtn.setImageResource(R.drawable.pause_button);Intent intent = new Intent();intent.setAction(org.music.service.LocalMusicService);intent.putExtra(op, PLAY);startService(intent);/ 暂停protected void pause() flag = PAUSE;playbtn.setImageResource(R.drawable.play_button);Intent intent = new Intent();intent.setAction(org.music.service.LocalMusicService);intent.putExtra(op, PAUSE);startService(intent);/ 停止播放音乐private void stop() Intent intent = new Intent();intent.setAction(org.music.service.LocalMusicService);intent.putExtra(op, STOP);startService(intent);进行上一曲和下曲的功能,代码如下:/ 上一首protected void latestOne() if (position = 0) position = _ids.length - 1; else if (position 0) position-;stop();setup();play();/ 下一首播放音乐protected void nextOne() if (position = _ids.length - 1) position = 0; else if (position _ids.length - 1) position+;stop();setup();play();3.2.3 数据共享机制在使用ContentResoler时,调用者不能直接调用ContentResoler的接口函数,而需要而需要使用ContentResoler对象,通过URI间接调用ContentResoler。本软件中主要用到了ContentResoler中的query()函数,用于查询歌曲的信息内容,相关代码如下:private void ReadSDLrc() cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,new String MediaStore.Audio.Media.TITLE,MediaStore.Audio.Media.DURATION,MediaStore.Audio.Media.ARTIST,MediaStore.Audio.Media.ALBUM,MediaStore.Audio.Media.DISPLAY_NAME,MediaStore.Audio.Media.ALBUM_ID , _id=?,/ 我们们现在的歌词就是要String数组的第4个参数,显示文件名字new String _idsposition + , null);cursor.moveToFirst();/ 将游标移至第一位Bitmap bm = getArtwork(this, cursor.getInt(3), cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID), true);/显示专辑图片,用Bitmap读出albumpic.setImageBitmap(bm);String name = cursor.getString(4);/ 游标定位到DISPLAY_NAMEread(/sdcard/ + name.substring(0, name.indexOf(.) + .lrc);/ sd卡的音乐名字截取字符窜并找到它的位置,这步重要,没有写一直表示歌词文件无法显示System.out.println(cursor.getString(4);/ 调试时我们先把音乐名字写死,在控制台打印能显示出音乐名字,那么由于判断音乐名字没问题.只是没有获取位置/ 初始化服务private void init() IntentFilter filter = new IntentFilter();filter.addAction(MUSIC_CURRENT);filter.addAction(MUSIC_DURATION);filter.addAction(MUSIC_NEXT);filter.addAction(MUSIC_UPDATE);registerReceiver(musicreceiver, filter);/ 截取标题,歌词,歌名private void loadclip() seekbar.setProgress(0);int pos = _idsposition;name.setText

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论