基于Android的多媒体播放器课程设计报告.doc
《基于Android的多媒体播放器课程设计报告.doc》由会员分享,可在线阅读,更多相关《基于Android的多媒体播放器课程设计报告.doc(27页珍藏版)》请在咨信网上搜索。
- - /* 附源码。希望此文能帮助到一些新手。也希望更多的人在网络上分享自己的学习成果。 */ 1、 开发环境 Android 是一种基于 Linux® V2.6 核的综合操作环境。最初,Android 的部署目标是移动领域,包括智能和更廉价的翻盖手机。Android 全面的计算效劳和丰富的功能支持完全有能力扩展到移动市场以外。Android 也可以用于其他的平台和应用程序。下面搭建Android的开发环境。 1.1 JDK安装 1、首先把所有要安装文件放在Android_software文件夹中; 2、安装jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008文件; 3、配置环境变量: 〔1〕新建一个用户变量,变量名是JAVA_HOME,变量值为:JDK的安装路径; 〔2〕查看系统变量Path,如果有显示路径加\bin,没有那么加%JAVA_HOME%\bin; 〔3〕查看class,如果有显示路径加\lib,没有那么加%JAVA_HOME%\lib; 4、解压eclipse-jee-juno-win32文件,运行eclipse.exe,在workspace launcher窗口中,设置工程保存路径; 1.2 Android SDK安装以及系统设置 在eclipse菜单栏的window子菜单下点击perferences,选择android,在右边的对话框中选择按钮Browse,找到SDK源文件,自动出来SDK包含的Android版本,点击Apply按钮,完成安装; 在用户变量里面,新建一个JAVA_SDK变量,值设置的值为SDK安装的路径; 在系统变量里面参加%JAVA_HOME%\bin,%JAVA_SDK%\tools,%JAVA_SDK%\platform-tools。 图1.设置环境变量 1.3 Eclipse安装以及ADT工具的安装 ADT插件的安装: 〔1〕解压ADT文件; 〔2〕翻开eclipse菜单上help 子目录下的Install new software; 〔3〕在弹出的Install窗口中点击Add,在弹出的窗口中,name:ADT Location:点击location按钮找到解压的ADT源文件; 〔4〕安装成功后,重新启动eclipse; 1.4 模拟器的配置 1、 运行eclipse,在window子菜单下点击AVD Manager开场配置模拟器; 2、 在Android Virtual Device Manager 下点击NEW,开场创立模拟器; 3、 在create new Android Virtual Manager窗口中,输入模拟器的名称、版本、 存储卡大小,手机屏幕的分辨率,输入完后,点击Create AVD,创立完成; 4、 在Android Virtual Device Manager窗口中,选中模拟器后,点击start,启 动模拟器。 图2 启动模拟器 2、功能说明 2.1 软件构造与布局 设计布局框架分为三个局部: 图形菜单主界面menu_main.xml ,对应类文件MediaPlay.java 媒体功能实现界面menu_main.xml menuForMain.java 媒体列表界面 mylist.xml以及listview.xml样式布局listtype.xml MediaList.java 逻辑架构如下: 2.2图像菜单功能 主要控件及功能 Gallery MyGallery:用于显示图形菜单,双击图片进入相应的功能界面 TextView menuTv:用于显示菜单项选择项信息 使用说明: 1、双击MyGallery中装载的一组图片〔屏幕底部〕中的其中任何一图片进入相应的功能面 板 2、通过在MyGallery滑动来到达更改菜单项选择项的功能 3、menuTv会实时显示当前选中的菜单项的详细说明 2.3 音频文件播放 主要控件及功能 ImageButton ibtnPlayAndPuase 开场/暂停 ImageButton ibtnStop 停顿 ImageButton ibtnLast,上一曲 ImageButton ibtnNext;下一曲 SeekBar MySeekBar; 进度条 TextView MytvScreen;信息显示 TextView tbTimer ;用于显示当前播放时间进度 使用说明: 1、当进入音乐播放界面时,后台读取保存在本地的音乐列表文件,假设不存在列表文件那么自动扫描/sdcard/Music/目录下音频文件 2、播放和暂停键复用,当第一次点击播放按钮,再次点击那么为暂停,再次点击那么继续之前的位置播放;停顿按钮那么是将当前播放进度设置为0并暂停播放;上一曲、下一曲按钮那么实现歌曲切换功能 3、进度条和tbTimer控件那么实时显示当前播放音乐的时间进度,MytvScreen会显示当前正在播放歌曲的详细信息 2.4 视频文件播放 主要控件及功能 ImageButton ibtnPlayAndPuase 开场/暂停 ImageButton ibtnStop 停顿 ImageButton ibtnLast,上一曲 ImageButton ibtnNext;下一曲 SeekBar MySeekBar; 进度条 VideoView MyVideoView; 用于播放视频的组件 使用说明: 1、当进入视频播放界面时,后台读取保存在本地的视频列表文件,假设不存在列表文件那么自动扫描/sdcard/Video/目录下音频文件 2、播放、暂停、上一部、下一步、停顿以及进度条、时间显示条皆复用音乐界面的按钮,功能也与其一致,这里不赘述。 2.5 录音 主要控件及功能 ImageButton ibtnPlayAndPuase 开场/暂停 ImageButton ibtnStop 停顿 ImageButton ibtnLast,上一曲 ImageButton ibtnNext;下一曲 SeekBar MySeekBar; 进度条 Button btnRecording; 录音开关 使用说明: 1、当进入录音界面时,后台读取保存在本地的视频列表文件,假设不存在列表文件那么自动扫描/sdcard/MyRecords/目录下录音文件 2、播放、暂停、上一部、下一步、停顿以及进度条、时间显示条皆复用音乐界面的按钮,功能也与其一致,这里不赘述。 3、点击开场录音按钮,那么按钮显示为“录音中...〞,此时播放等按钮无法使用,进度条中间会显示当前的录音时间。在次点击此按钮那么停顿录音。此时可点击播放按钮试听刚刚的录音。 4、以上所有操作在主显示区域都会有文字描述 3、软件设计与调试 3.1软件在虚拟机上调试及分析 3.1.1图形菜单 核心代码: //图片装载 int MenuImages[]={R.drawable.menu4,R.drawable.menu1,R.drawable.menu2, R.drawable.menu3,R.drawable.menu5}; MyGallery.setAdapter(new ImageAdapter(this)); publicclass ImageAdapter extends BaseAdapter {Override public View getView(int arg0, View arg1, ViewGroup arg2) { // TODO Auto-generated method stub ImageView i = new ImageView(mContext); i.setImageResource(MenuImages[arg0]); i.setAdjustViewBounds(true); i.setLayoutParams(newGallery.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); // i.setBackgroundResource(R.drawable.e); return i;}} //页面跳转 Override publicboolean onDoubleTap(MotionEvent arg0) { // TODO Auto-generated method stub Intent MyIntent=new Intent(); MyIntent.setClass(menuForMain.this,MediaPlay.class); Bundle MyBundle=new Bundle(); MyBundle.putInt("name", MyGallery.getSelectedItemPosition()); MyIntent.putExtras(MyBundle); startActivity(MyIntent); returnfalse;} 3.1.2音乐播放 播放: MyMediaPlayer.setDataSource(MusicList.get(Mediasp)); MyMediaPlayer.prepare();MyMediaPlayer.start();//播放 MyMediaPlayer.pause();//暂停 MyMediaPlayer.pause();MyMediaPlayer.seekTo(0);//停顿(为了能使点击播放按钮能在此播放,这里不调用MyMediaPlayer.stop()方法) 3.1.3视频播放器 MyVideoView.setVideoURI(Uri.parse(VideoList.get(Mediasp)));//设置视频源 MyVideoView.start();//播放 MyMediaPlayer.pause();//暂停 MyVideoView.pause();MyVideoView.seekTo(0);//停顿 3.1.4录音 //播放 new DateFormat(); file=new File("/sdcard/MyRecords/"+"bear"+DateFormat.format("yyyyMMdd_hhmmss",Calendar.getInstance(Locale.CHINA))+".amr"); File destDir = new File("/sdcard/MyRecords/"); if (!destDir.exists()){ destDir.mkdirs();} MyMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);MyMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); MyMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); file.createNewFile(); MyMediaRecorder.setOutputFile(file.getAbsolutePath()); MyMediaRecorder.prepare(); MyMediaRecorder.start(); //停顿录音 MyMediaRecorder.reset(); 须加一个权限开发,在AndroidManifest.xml: <uses-permissionandroid:name="android.permission.RECORD_AUDIO"></uses-permission> <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 3.1.5、公共方法 //1、滑动屏幕改变媒体音量 //设置音量 MyAudioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); //2、添加屏幕触发事件 MyGestureDetector =new GestureDetector(this,new MyGestureDetectorListener()); MytvScreen.setOnTouchListener(new OnTouchListener(){ Override public boolean onTouch(View arg0, MotionEvent arg1) { return MyGestureDetector.onTouchEvent(arg1);} }); Private class MyGestureDetectorListener implements OnDoubleTapListener{ Override// 滚动,触摸屏按下后移动 public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2, float arg3) { if(AudioManagerFlag==0){ AudioManagerY=arg0.getY(); AudioManagerX=arg0.getX();} int IsSound=0; if(AudioManagerFlag>5){ AudioManagerFlag=0; if(((AudioManagerY-arg1.getY())<1)||(arg1.getY()-AudioManagerY<1)){ if(arg0.getX()>arg1.getX())//左滑动调小音量{MyAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_LOWER, AudioManager.FX_FOCUS_NAVIGATION_UP);} else//右滑动调大音量{MyAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_RAISE,AudioManager.FX_FOCUS_NAVIGATION_UP); }}} else{ AudioManagerFlag++;} return false;} 3、长按调整至列表界面 Override// 长按,触摸屏按下后既不抬起也不移动,过一段时间后触发 public void onLongPress(MotionEvent arg0) { AudioManagerFlag=0; if(MyVideoView.isPlaying()){ MyVideoView.pause(); ibtnPlayAndPuase.setImageResource(R.drawable.ibtnplay); ibtnPlayAndPuase.setTag("play");} Intent i=new Intent(); i.setClass(MediaPlay.this,MediaList.class); Bundle data=new Bundle(); //调出菜单,第一个参数是列表的类型,第二个参数是当前歌曲在播放离别中的位置 data.putInt("sp",Mediasp); data.putInt("Type",MyRadioGroup.getCheckedRadioButtonId()); i.putExtras(data); startActivityForResult(i,MyRadioGroup.getCheckedRadioButtonId());}} 3、列表显示 //接收来自功能面板的列表请求 Bundle MyBundle=this.getIntent().getExtras(); try{int rbtnId=0; rbtnId=MyBundle.getInt("Type"); //intMediasp=MyBundle.getInt("sp"); switch(rbtnId){ case R.id.rbtnMusic: //MyMediaList=sp.getMusicList(); //createList(MyMediaList,0); resultCode=1; getFiles(Filepath+"kugou/",".mp3",MyMediaList,true); Filepath+="Music/"; getFiles(Filepath,".mp3",MyMediaList,false); sp.setMusicList(MyMediaList); break; case R.id.rbtnVideo: //MyMediaList=sp.getVideoList(); //createList(MyMediaList,1); resultCode=2; Filepath+="Videos"; getFiles(Filepath,".mp4",MyMediaList,false); getFiles(Filepath,".3gp",MyMediaList,false); sp.setVideoList(MyMediaList); break; case R.id.rbtnRecord: //MyMediaList=sp.getRecordList(); //createList(MyMediaList,2); resultCode=3; Filepath+="MyRecords"; getFiles(Filepath,".amr",MyMediaList,false); sp.setRecordList(MyMediaList); break; default: break;}} //获取列表 privatevoid getFiles(String dirpath,String fileType,ArrayList<String> List,boolean IsIterative){ //List.clear(); File[] files = new File(dirpath).listFiles(); File f; if(files == null) { return; } for (int i = 0; i < files.length; i++) { f = files[i]; if(!f.canRead()) { continue; } if (f.isFile()) { if (f.getName().contains(fileType)) //判断扩展名 { List.add(f.getPath()); } } elseif (f.isDirectory()&&IsIterative==true) getFiles(f.getPath(), fileType,List, IsIterative); }} //listview长按监听事件 mylist.setOnItemLongClickListener(new OnItemLongClickListener(){ SuppressLint("ShowToast") Override publicboolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub setTitle("你点击了第"+arg2+"项"); MediaList.this.setResult(resultCode); sp.setMediasp(arg2);//通过全局变量传递参数 finish(); returnfalse;}}); 3.2 软件在手机上的测试 4、设计总结 经过一个多星期的开发,使我从对android从一无所知到现在初入android门槛,这是一个艰辛的过程。但还好之前对C#有一定的功底,使得java语言中关于面向对象的局部都能轻易的理解。只是欠于了解android开发独有的机制以及对eclipce这个软件操作环境的熟识上。 这次课设的要做出一个音乐播放、视频播放、录音三个功能于一体的手机软件出来。功能算是比拟简单。但在课设的第一步,控件布局上就屡屡出现问题,最好花了大量的时间才调整好布局,也渐渐找到了elipce关于控件布局操作的规律。 当我终于完成了软件的外观布局后,更多的问题接踵而来。比方按钮事件的监听,这里面涉及android的类的继承等,曾一度让我的逻辑出现混沌。后来通过比照C#事件触发机制以及查阅了网络资料才理解了这个东西。 关于功能的编程实现上,根本上比拟轻松。除了满足课设根本要求外,我还增加了音量调节、进度条、媒体列表、文件信息显示等功能。但是实现这些功能虽然有完善的逻辑思想,但是比拟对java语法还不甚了解,以至于出现逻辑上没错误,语法出现错误的现象。不过这些问题在之后随着对网络资料的大量查阅一个接着一个解决了。 到了课设的最后一天,我的软件根本实现了自己所附加的功能,但通过这次课设,使我深刻的认识到,课设虽然完结,但我的android开发并不会止步。在以后的日子里我还会继续做下去,比方加上歌词同步显示的功能、网络自动搜索歌词的功能。我想,我对android软件开发已经拥有了浓厚的兴趣。这里也确实要感同学以及网络上那些无私奉献的人。 5.附录 源代码下载:vdisk.weibo./s/z45_CkcauTkKm - - word.zl-- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Android 多媒体 播放 课程设计 报告
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文