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

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

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

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

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

日期

2013-12-09

实验类型

实验

实验学时

4

2013-12-9

一、实验目的和要求

验证Broadcast的发送与接收

验证多线程间的数据传递

验证Service的使用方法

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

编写一个Android小程序要求:

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

2、使用多线程

3、适当应用Service

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

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

PC(Window7)、Eclipse

3、实验原理及内容

在这个程序中涉及到了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;

}

publicvoidonCreate(){

lists=MusicList.getMusicData(getApplicationContext());

SeekBarBroadcastReceiverreceiver=newSeekBarBroadcastReceiver();

IntentFilterfilter=newIntentFilter("

.karl.seekBar"

);

this.registerReceiver(receiver,filter);

newThread(this).start();

super.onCreate();

publicvoidonStart(Intentintent,intstartId){

Stringplay=intent.getStringExtra("

play"

_id=intent.getIntExtra("

id"

1);

if(play.equals("

)){

if(null!

=player){

player.release();

player=null;

}

playMusic(_id);

}elseif(play.equals("

pause"

player.pause();

playing"

if(player!

=null){

player.start();

}else{

playMusic(_id);

replaying"

first"

intid=intent.getIntExtra("

0);

playMusic(id);

rewind"

forward"

last"

}

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

}catch(IllegalStateExceptione){

}catch(IOExceptione){

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.setOnErrorListener(newOnErrorListener(){

publicbooleanonError(MediaPlayermp,intwhat,intextra){

if(null!

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){

}catch(IllegalStateExceptione){

}catch(IOExceptione){

returnfalse;

privateclassSeekBarBroadcastReceiverextendsBroadcastReceiver{

@Override

publicvoidonReceive(Contextcontext,Intentintent){

//TODOAuto-generatedmethodstub

intseekBarPosition=intent.getIntExtra("

seekBarPosition"

//System.out.println("

--------"

+seekBarPosition);

player.seekTo(seekBarPosition*player.getDuration()/100);

player.start();

publicvoidrun(){

while(isRun){

try{

Thread.sleep(200);

}catch(InterruptedExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

intposition=player.getCurrentPosition();

inttotal=player.getDuration();

Intentintent=newIntent("

.karl.progress"

intent.putExtra("

position"

position);

total"

total);

sendBroadcast(intent);

if(player.isPlaying()){

playing=true;

}else{

playing=false;

HandlermHandler=newHandler();

//歌词滚动线程

RunnablemRunnable=newRunnable(){

publicvoidrun(){

MusicActivity.lrc_view.SetIndex(LrcIndex());

MusicActivity.lrc_view.invalidate();

mHandler.postDelayed(mRunnable,100);

};

//创建对象

LrcContent>

lrcList=newArrayList<

();

//初始化歌词检索值

privateintindex=0;

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

privateintCurrentTime=0;

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

privateintCountTime=0;

/**

*歌词同步处理类

*/

publicintLrcIndex(){

if(player.isPlaying()){

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

CurrentTime=player.getCurrentPosition();

//获得歌曲总时间长度

CountTime=player.getDuration();

if(CurrentTime<

CountTime){

for(inti=0;

i<

lrcList.size();

i++){

if(i<

lrcList.size()-1){

if(CurrentTime<

lrcList.get(i).getLrc_time()&

&

i==0){

index=i;

}

if(CurrentTime>

lrcList.get(i).getLrc_time()

&

CurrentTime<

lrcList.get(i+1).getLrc_time()){

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

&

CurrentTime>

lrcList.get(i).getLrc_time()){

index=i;

returnindex;

}

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

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