简易音乐播放器报告.doc

上传人:jian****018 文档编号:8963625 上传时间:2020-04-02 格式:DOC 页数:18 大小:657KB
返回 下载 相关 举报
简易音乐播放器报告.doc_第1页
第1页 / 共18页
简易音乐播放器报告.doc_第2页
第2页 / 共18页
简易音乐播放器报告.doc_第3页
第3页 / 共18页
点击查看更多>>
资源描述
音乐播放器报告书 项目名称:简易音乐播放器 小组编号: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(_titlesposition);artist.setText(_artistsposition);Intent intent = new Intent();intent.putExtra(_id, pos);intent.putExtra(_titles, _titles);intent.putExtra(position, position);intent.setAction(org.music.service.LocalMusicService);startService(intent);第4章 总结通过对Android手机平台的音乐播放器软件的开发,使我们对Android音乐播放器系统的整体设计有一个深入的了解,对整个流程也会有一个清晰的认识。开发Android音乐播放器,要抓住开发的核心部分,音乐播放器大体由播放主界面、播放列表核心组成,只要掌握了这两部分的开发,音乐播放器就能初具规模。而其它的功能都是在这两个功能的基础上去补充添加的,但是这是功能的确是必不可少的功能,否则就不能算是音乐播放器了。音乐播放器系统实现了播放器的基本功能:播放,暂停、上/下一首、音量调节功能。运用的系统平台是现今最热门的Android系统,是一个开源的基于Linux系统的手机平台。是以Java语言编写+ContentProvider共享数据的组合方式进行数据管理。实现了音乐播放器的系统编程。经过这些天的Android系统技术知识的学习和对音乐播放器的构思与设计,使我们对Android系统有了一定的了解,让我们对Android系统上的开发流程和开发模式有了深入的了解,这对我们以后的Android项目开发有很大的帮助。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!