安卓Android广播线程服务与多媒体开发实验报告.docx

上传人:b****6 文档编号:7037125 上传时间:2023-01-16 格式:DOCX 页数:11 大小:28.03KB
下载 相关 举报
安卓Android广播线程服务与多媒体开发实验报告.docx_第1页
第1页 / 共11页
安卓Android广播线程服务与多媒体开发实验报告.docx_第2页
第2页 / 共11页
安卓Android广播线程服务与多媒体开发实验报告.docx_第3页
第3页 / 共11页
安卓Android广播线程服务与多媒体开发实验报告.docx_第4页
第4页 / 共11页
安卓Android广播线程服务与多媒体开发实验报告.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

安卓Android广播线程服务与多媒体开发实验报告.docx

《安卓Android广播线程服务与多媒体开发实验报告.docx》由会员分享,可在线阅读,更多相关《安卓Android广播线程服务与多媒体开发实验报告.docx(11页珍藏版)》请在冰豆网上搜索。

安卓Android广播线程服务与多媒体开发实验报告.docx

安卓Android广播线程服务与多媒体开发实验报告

 

实验报告

(2013/2014学年第一学期)

 

课程名称

软件技术系列课程(Android基础)

实验名称

Android广播、线程、服务与多媒体开发

实验时间

2013

12

9

指导单位

计算机学院、诚迈科技()公司

指导教师

学生

班级学号

学院(系)

计算机学院

专业

软件工程(计算机软件与服务外包)

成绩

批阅人

王彦

日期

2013-12-09

实验报告

实验名称

Android广播、线程、服务与多媒体开发

指导教师

实验类型

实验

实验学时

4

实验时间

2013-12-9

一、实验目的和要求

验证Broadcast的发送与接收

验证多线程间的数据传递

验证Service的使用方法

验证多媒体开发中音频、视频、或图像的采集与播放

编写一个Android小程序要求:

1、使用广播传递数据或信息

2、使用多线程

3、适当应用Service

4、实现至少一种多媒体功能

二、实验环境(实验设备)

PC(Window7)、Eclipse

三、实验原理及容

在这个程序中涉及到了Receiver和BroadcastReceiver的结合使用,首先在AndroidManifest.xml中注册Receiver,实现能够在后台播放音乐的功能。

通过CommandReceiver类实现接受前台Activity发送的播放命令的Intent。

在CommandReceiver类中,有后台Service注册的接受前台控制命令Intent的Receiver,广播播放状态变化的Intent

代码

publicclassMusicServiceextendsServiceimplementsRunnable{

privateMediaPlayerplayer;

privateListlists;

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..karl.seekBar");

this.registerReceiver(receiver,filter);

newThread(this).start();

super.onCreate();

}

Override

publicvoidonStart(Intentintent,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("pletion");

sendBroadcast(intent);

_id=_id+1;

playMusic(_id);

}else{//单曲播放

player.reset();

Intentintent=newIntent("pletion");

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..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);

}

};

//创建对象

privateListlrcList=newArrayList();

//初始化歌词检索值

privateintindex=0;

//初始化歌曲播放时间的变量

privateintCurrentTime=0;

//初始化歌曲总时间的变量

privateintCountTime=0;

/**

*歌词同步处理类

*/

publicintLrcIndex(){

if(player.isPlaying()){

//获得歌曲播放在哪的时间

CurrentTime=player.getCurrentPosition();

//获得歌曲总时间长度

CountTime=player.getDuration();

}

if(CurrentTime

for(inti=0;i

if(i

if(CurrentTime

index=i;

}

if(CurrentTime>lrcList.get(i).getLrc_time()

&&CurrentTime

index=i;

}

}

if(i==lrcList.size()-1

&&CurrentTime>lrcList.get(i).getLrc_time()){

index=i;

}

}

}

returnindex;

}

}

 

四、实验小结(包括问题和解决方法、心得体会等)

1.对于sendBroadCast的intent对象,需要设置其actionname;

2.推荐使用显式指明receiver,在配置文件AndroidManifest.xml指明;

3.一个receiver可以接收多个action;

4.每次接收广播都会重新生成一个接收广播的对象,再次调用onReceive;

5.在BroadCast中尽量不要处理太多逻辑问题,建议复杂的逻辑交给Activity或者Service去处理。

通过这次实验,让我对Broadcast、尤其是Service有了更深入的认识,还让我意识到编程方面和知识体系机构方面存在的不足。

总之,这次试验让我Android编程能力有了一定的提高。

利用这次试验,也将我们的大作业更加完善。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1