版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验报告(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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 规划环节安全规范讲解
- 幼儿食品添加剂
- 医院安全生产培训讲解
- 2023年全国监理工程师执业资格考试《建设工程协议管理》试卷
- 2023届北京市师范大学某中学高考数学试题必刷模拟卷
- 2024-2025学年高中化学期末大串讲专题12金属矿物的开发利用知识讲解含解析
- 2023年山东省烟台市招远市部分学校高考语文模拟试卷(5月份)
- 2023-2024一级建造师之一建公路工程实务基本知识过关训练
- 制冷设备相关项目投资计划书范文
- 质量管理体系 (四)
- 2025年漯河职业技术学院高职单招语文2018-2024历年参考题库频考点含答案解析
- 地基与基础计算题
- 消防安装工程各项调试方案
- 二零二五年度学校卫生消杀承包协议书4篇
- 语言活动调皮的小樱桃
- 电商平台员工劳动合同示例
- 基于51单片机的指纹密码锁设计与制作
- 沉浸式文旅景区演绎规划方案【旅游】【沉浸式演艺空间】
- 变电站新建工程三通一平场地平整施工方案
- 转炉煤气净化及回收工程技术规范
- 数据挖掘与机器学习全套教学课件
评论
0/150
提交评论