




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验报告(2023/2023学年第一学期)课程名称软件技术系列课程(Android基础)实验名称Android广播、线程、服务与多媒体开发实验时间2023年12月9日指导单位计算机学院、诚迈科技(南京)公司指导教师学生姓名班级学号学院(系)计算机学院专业软件工程(计算机软件与服务外包)成绩批阅人王彦日期2023-12-09实验报告实验名称Android广播、线程、服务与多媒体开发指导教师实验类型实验实验学时4实验时间2023-12-9实验目的和规定验证Broadcast的发送与接受验证多线程间的数据传递验证Service的使用方法验证多媒体开发中音频、视频、或图像的采集与播放编写一个Android小程序规定:1、使用广播传递数据或信息2、使用多线程3、适当应用Service4、实现至少一种多媒体功能实验环境(实验设备)PC(Window7)、Eclipse实验原理及内容在这个程序中涉及到了Receiver和BroadcastReceiver的结合使用,一方面在AndroidManifest.xml中注册Receiver,实现可以在后台播放音乐的功能。通过CommandReceiver类实现接受前台Activity发送的播放命令的Intent。在CommandReceiver类中,有后台Service注册的接受前台控制命令Intent的Receiver,广播播放状态变化的Intent代码publicclassMusicServiceextendsServiceimplementsRunnable{ﻩprivateMediaPlayerplayer; privateList<Music>lists; publicstaticint_id=1;//当前播放位置ﻩpublicstaticBooleanisRun=true;ﻩpublicLrcProcessmLrcProcess;ﻩpublicLrcViewmLrcView; publicstaticintplaying_id=0;ﻩpublicstaticBooleanplaying=false; @OverrideﻩpublicIBinderonBind(Intentarg0){ﻩ //TODOAuto-generatedmethodstubﻩﻩreturnnull;ﻩ} @OverrideﻩpublicvoidonCreate(){ //TODOAuto-generatedmethodstubﻩﻩlists=MusicList.getMusicData(getApplicationContext());ﻩﻩSeekBarBroadcastReceiverreceiver=newSeekBarBroadcastReceiver(); ﻩIntentFilterfilter=newIntentFilter("cn.com.karl.seekBar");ﻩ this.registerReceiver(receiver,filter); ﻩnewThread(this).start();ﻩﻩsuper.onCreate(); }ﻩ@Override publicvoidonStart(Inteent,intstartId){ﻩﻩ//TODOAuto-generatedmethodstubﻩﻩStringplay=intent.getStringExtra("play");ﻩﻩ_id=intent.getIntExtra("id",1);ﻩﻩif(play.equals("play")){ ﻩﻩif(null!=player){ﻩﻩﻩﻩplayer.release();ﻩﻩﻩﻩplayer=null;ﻩﻩﻩ}ﻩﻩﻩplayMusic(_id); ﻩ}elseif(play.equals("pause")){ ﻩﻩif(null!=player){ﻩﻩﻩ player.pause();ﻩﻩﻩ}ﻩﻩ}elseif(play.equals("playing")){ﻩﻩﻩif(player!=null){ﻩﻩﻩﻩplayer.start();ﻩ ﻩ}else{ﻩ ﻩ playMusic(_id);ﻩ ﻩ} }elseif(play.equals("replaying")){ﻩﻩ}elseif(play.equals("first")){ﻩ ﻩintid=intent.getIntExtra("id",0);ﻩﻩ playMusic(id); ﻩ}elseif(play.equals("rewind")){ﻩ ﻩintid=intent.getIntExtra("id",0);ﻩﻩﻩplayMusic(id);ﻩﻩ}elseif(play.equals("forward")){ﻩﻩﻩintid=intent.getIntExtra("id",0);ﻩﻩﻩplayMusic(id);ﻩﻩ}elseif(play.equals("last")){ﻩﻩ intid=intent.getIntExtra("id",0);ﻩ ﻩplayMusic(id); }ﻩ}ﻩprivatevoidplayMusic(intid){ ﻩ/////////////////////////初始化歌词配置///////////////////////// ﻩmLrcProcess=newLrcProcess();ﻩ //读取歌词文献 ﻩmLrcProcess.readLRC(lists.get(_id).getUrl()); ﻩ//传回解决后的歌词文献 ﻩlrcList=mLrcProcess.getLrcContent();ﻩﻩMusicActivity.lrc_view.setSentenceEntities(lrcList);ﻩﻩ//切换带动画显示歌词ﻩﻩMusicActivity.lrc_view.setAnimation(AnimationUtils.loadAnimation(ﻩ ﻩﻩMusicService.this,R.anim.alpha_z)); ﻩ//启动线程 ﻩmHandler.post(mRunnable);ﻩﻩ/////////////////////////初始化歌词配置/////////////////////////ﻩﻩif(null!=player){ﻩﻩﻩplayer.release(); ﻩﻩplayer=null;ﻩ }ﻩ if(id>=lists.size()-1){ﻩﻩﻩ_id=lists.size()-1;ﻩﻩ}elseif(id<=0){ ﻩ _id=0;ﻩﻩ}ﻩ Musicm=lists.get(_id);ﻩﻩStringurl=m.getUrl();ﻩﻩUrimyUri=Uri.parse(url);ﻩﻩplayer=newMediaPlayer();ﻩﻩplayer.reset(); ﻩplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);ﻩﻩtry{ﻩﻩﻩplayer.setDataSource(getApplicationContext(),myUri); ﻩplayer.prepare();ﻩﻩ}catch(IllegalArgumentExceptione){ ﻩﻩ//TODOAuto-generatedcatchblock ﻩﻩe.printStackTrace();ﻩﻩ}catch(SecurityExceptione){ ﻩﻩ//TODOAuto-generatedcatchblockﻩ e.printStackTrace(); }catch(IllegalStateExceptione){ﻩﻩﻩ//TODOAuto-generatedcatchblockﻩﻩﻩe.printStackTrace(); }catch(IOExceptione){ﻩﻩﻩ//TODOAuto-generatedcatchblockﻩﻩﻩe.printStackTrace();ﻩﻩ} player.start(); ﻩplayer.setOnCompletionListener(newOnCompletionListener(){ﻩ @OverrideﻩﻩﻩpublicvoidonCompletion(MediaPlayermp){ﻩﻩﻩﻩ//TODOAuto-generatedmethodstub ﻩﻩ //下一首 ﻩﻩﻩif(MusicActivity.isLoop==true){ﻩ ﻩﻩﻩplayer.reset(); ﻩﻩﻩIntentintent=newIntent("cn.com.karpletion");ﻩﻩﻩﻩﻩsendBroadcast(intent); ﻩﻩﻩ _id=_id+1; ﻩﻩﻩﻩplayMusic(_id);ﻩﻩ ﻩ}else{//单曲播放 ﻩﻩﻩﻩplayer.reset();ﻩ ﻩﻩﻩIntentintent=newIntent("cn.com.karl.completion");ﻩﻩﻩﻩﻩsendBroadcast(intent);ﻩﻩﻩﻩﻩplayMusic(_id);ﻩﻩﻩﻩ}ﻩﻩﻩ}ﻩﻩ}); ﻩplayer.setOnErrorListener(newOnErrorListener(){ﻩﻩﻩ@OverrideﻩﻩﻩpublicbooleanonError(MediaPlayermp,intwhat,intextra){ﻩ ﻩﻩ//TODOAuto-generatedmethodstubﻩﻩﻩﻩif(null!=player){ ﻩﻩﻩﻩplayer.release();ﻩﻩ player=null;ﻩﻩﻩ } ﻩ Musicm=lists.get(_id); ﻩﻩﻩStringurl=m.getUrl();ﻩﻩﻩﻩUrimyUri=Uri.parse(url);ﻩﻩﻩﻩplayer=newMediaPlayer();ﻩﻩﻩﻩplayer.reset();ﻩﻩﻩﻩplayer.setAudioStreamType(AudioManager.STREAM_MUSIC); ﻩ ﻩtry{ﻩﻩﻩﻩﻩplayer.setDataSource(getApplicationContext(),myUri);ﻩﻩ ﻩﻩplayer.prepare();ﻩﻩﻩﻩ}catch(IllegalArgumentExceptione){ﻩ ﻩﻩ //TODOAuto-generatedcatchblockﻩﻩﻩﻩﻩe.printStackTrace();ﻩﻩﻩﻩ}catch(SecurityExceptione){ ﻩ ﻩﻩ//TODOAuto-generatedcatchblock ﻩﻩe.printStackTrace();ﻩﻩﻩﻩ}catch(IllegalStateExceptione){ ﻩﻩﻩ//TODOAuto-generatedcatchblockﻩﻩ ﻩe.printStackTrace();ﻩ ﻩ }catch(IOExceptione){ﻩﻩﻩﻩ //TODOAuto-generatedcatchblockﻩﻩﻩ ﻩe.printStackTrace();ﻩ ﻩﻩ}ﻩﻩﻩﻩplayer.start();ﻩﻩﻩﻩreturnfalse; ﻩ }ﻩﻩ});ﻩ}ﻩprivateclassSeekBarBroadcastReceiverextendsBroadcastReceiver{ﻩﻩ@OverrideﻩﻩpublicvoidonReceive(Contextcontext,Intentintent){ﻩ ﻩ//TODOAuto-generatedmethodstubﻩ ﻩintseekBarPosition=intent.getIntExtra("seekBarPosition",0);ﻩﻩﻩ//System.out.println("--------"+seekBarPosition);ﻩﻩﻩplayer.seekTo(seekBarPosition*player.getDuration()/100);ﻩ ﻩplayer.start(); ﻩ}ﻩ}ﻩ@Override publicvoidrun(){ﻩ //TODOAuto-generatedmethodstubﻩ while(isRun){ﻩ ﻩtry{ﻩﻩﻩﻩThread.sleep(200); ﻩ}catch(InterruptedExceptione){ﻩﻩﻩ //TODOAuto-generatedcatchblockﻩﻩﻩﻩe.printStackTrace();ﻩ ﻩ} ﻩif(null!=player){ ﻩﻩ intposition=player.getCurrentPosition(); ﻩﻩﻩinttotal=player.getDuration();ﻩ ﻩﻩIntentintent=newIntent("cn.com.karl.progress");ﻩﻩﻩﻩintent.putExtra("position",position); ﻩﻩ intent.putExtra("total",total);ﻩ sendBroadcast(intent);ﻩ }ﻩﻩﻩif(null!=player){ﻩﻩﻩﻩif(player.isPlaying()){ ﻩﻩﻩﻩplaying=true;ﻩﻩﻩﻩ}else{ﻩﻩﻩﻩﻩplaying=false; ﻩﻩﻩ}ﻩﻩﻩ} ﻩ}ﻩ}ﻩHandlermHandler=newHandler();ﻩ//歌词滚动线程ﻩRunnablemRunnable=newRunnable(){ﻩﻩ@Overrideﻩﻩpublicvoidrun(){ﻩﻩﻩ//TODOAuto-generatedmethodstubﻩﻩ MusicActivity.lrc_view.SetIndex(LrcIndex());ﻩﻩﻩMusicActivity.lrc_view.invalidate(); ﻩmHandler.postDelayed(mRunnable,100);ﻩﻩ} };ﻩ//创建对象 privateList<LrcContent>lrcList=newArrayList<LrcContent>(); //初始化歌词检索值ﻩprivateintindex=0;ﻩ//初始化歌曲播放时间的变量ﻩprivatCurrentTime=0;ﻩ//初始化歌曲总时间的变量ﻩprivateintCountTime=0; /**ﻩ*歌词同步解决类 */ﻩpublicintLrcIndex(){ﻩﻩif(player.isPlaying()){ ﻩ//获得歌曲播放在哪的时间ﻩﻩﻩCurrentTime=player.getCurrentPosition();ﻩ ﻩ//获得歌曲总时间长度ﻩﻩﻩCountTime=player.getDuration();ﻩﻩ}ﻩﻩif(CurrentTime<CountTime){ ﻩfor(inti
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 等我拿下数学试卷
- 甘肃金太阳高一数学试卷
- 肌内效贴技术课件
- 2025年03月临沂临沭县部分医疗卫生事业单位公开招聘卫生类岗位工作人员(38名)笔试历年专业考点(难、易错点)附带答案详解
- 2025年04月四川广元市旺苍县人民医院招聘药学等专业人员3人笔试历年专业考点(难、易错点)附带答案详解
- 陈列手法培训课件
- 阜阳美睫培训课件
- 面试人员培训课件
- 财富传家b课件培训
- 2025至2030茶几行业市场深度研究及发展前景投资可行性分析报告
- 煤矿在用安全设备检测检验制度
- JJG 781-2019数字指示轨道衡
- JJG 30-2012通用卡尺
- GB/T 9729-2007化学试剂氯化物测定通用方法
- GB/T 8196-2018机械安全防护装置固定式和活动式防护装置的设计与制造一般要求
- GB/T 24632.2-2009产品几何技术规范(GPS)圆度第2部分:规范操作集
- GB/T 20428-2006岩石平板
- GB/T 11363-1989钎焊接头强度试验方法
- 内调焦准距式望远系统光学设计2022年
- 紧急采购申请单
- 核磁共振的发展史课件
评论
0/150
提交评论