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

上传人:b****1 文档编号:4261648 上传时间:2023-05-03 格式:DOCX 页数:17 大小:19.80KB
下载 相关 举报
安卓Android广播线程服务与多媒体开发实验报告Word格式文档下载.docx_第1页
第1页 / 共17页
安卓Android广播线程服务与多媒体开发实验报告Word格式文档下载.docx_第2页
第2页 / 共17页
安卓Android广播线程服务与多媒体开发实验报告Word格式文档下载.docx_第3页
第3页 / 共17页
安卓Android广播线程服务与多媒体开发实验报告Word格式文档下载.docx_第4页
第4页 / 共17页
安卓Android广播线程服务与多媒体开发实验报告Word格式文档下载.docx_第5页
第5页 / 共17页
安卓Android广播线程服务与多媒体开发实验报告Word格式文档下载.docx_第6页
第6页 / 共17页
安卓Android广播线程服务与多媒体开发实验报告Word格式文档下载.docx_第7页
第7页 / 共17页
安卓Android广播线程服务与多媒体开发实验报告Word格式文档下载.docx_第8页
第8页 / 共17页
安卓Android广播线程服务与多媒体开发实验报告Word格式文档下载.docx_第9页
第9页 / 共17页
安卓Android广播线程服务与多媒体开发实验报告Word格式文档下载.docx_第10页
第10页 / 共17页
安卓Android广播线程服务与多媒体开发实验报告Word格式文档下载.docx_第11页
第11页 / 共17页
安卓Android广播线程服务与多媒体开发实验报告Word格式文档下载.docx_第12页
第12页 / 共17页
安卓Android广播线程服务与多媒体开发实验报告Word格式文档下载.docx_第13页
第13页 / 共17页
安卓Android广播线程服务与多媒体开发实验报告Word格式文档下载.docx_第14页
第14页 / 共17页
安卓Android广播线程服务与多媒体开发实验报告Word格式文档下载.docx_第15页
第15页 / 共17页
安卓Android广播线程服务与多媒体开发实验报告Word格式文档下载.docx_第16页
第16页 / 共17页
安卓Android广播线程服务与多媒体开发实验报告Word格式文档下载.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

验证多线程间的数据传递

验证Service的使用方法

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

编写一个Android小程序要求:

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

2、使用多线程

3、适当应用Service

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

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

PC(Window7)、Eclipse

1

三、实验原理及内容

在这个程序中涉及到了Receiver和BroadcastReceiver的结合使用,首先在

AndroidManifest.xml中注册Receiver,实现能够在后台播放音乐的功能。

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

Intent。

在CommandReceiver类中,有后台Service注册的接受前台控制命

令Intent的Receiver,广播播放状态变化的Intent

代码

public

classMusicService

extends

Service

implementsRunnable{

private

MediaPlayer

player

;

List<

Music>

lists

static

int

_id

=1;

//

当前播放位置

Boolean

isRun=

true;

LrcProcess

mLrcProcess

LrcView

mLrcView;

playing_id

=0;

playing

=false

@Override

IBinderonBind(Intentarg0){

//TODOAuto-generatedmethodstubreturnnull;

}

publicvoidonCreate(){

//TODOAuto-generatedmethodstub

lists=MusicList.getMusicData(getApplicationContext());

SeekBarBroadcastReceiverreceiver=newSeekBarBroadcastReceiver();

IntentFilterfilter=newIntentFilter("

.karl.seekBar"

);

this.registerReceiver(receiver,filter);

newThread(this).start();

super.onCreate();

publicvoidonStart(Intentintent,intstartId){

2

Stringplay=intent.getStringExtra(

"

play"

_id=intent.getIntExtra(

id"

1);

if

(play.equals(

)){

null

!

=

){

.release();

playMusic(

_id);

else

pause"

.pause();

playing"

.start();

{

);

replaying"

first"

id=intent.getIntExtra(

0);

playMusic(id);

rewind"

forward"

last"

privatevoidplayMusic(intid){

/////////////////////////初始化歌词配置/////////////////////////

mLrcProcess=newLrcProcess();

//读取歌词文件

3

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;

(id>

.size()-1){

.size()-1;

(id<

=0){

Musicm=

.get(

Stringurl=m.getUrl();

UrimyUri=Uri.

parse

(url);

newMediaPlayer();

.reset();

.setAudioStreamType(AudioManager.

STREAM_MUSIC);

try

.setDataSource(getApplicationContext(),myUri);

.prepare();

catch

(IllegalArgumentExceptione){

//TODOAuto-generatedcatchblocke.printStackTrace();

}catch(SecurityExceptione){

}catch(IllegalStateExceptione){

}catch(IOExceptione){

player.start();

player.setOnCompletionListener(newOnCompletionListener(){

publicvoidonCompletion(MediaPlayermp){

//下一首

(MusicActivity.

isLoop==true){

Intentintent=

newIntent(

pletion"

sendBroadcast(intent);

+1;

单曲播放

});

player.setOnErrorListener(

newOnErrorListener(){

booleanonError(MediaPlayermp,

what,

extra){

(null

//TODOAuto-generatedcatchblock

e.printStackTrace();

5

returnfalse;

privateclassSeekBarBroadcastReceiverextendsBroadcastReceiver{

publicvoidonReceive(Contextcontext,Intentintent){

intseekBarPosition=intent.getIntExtra(

seekBarPosition"

//System.out.println("

--------"

+seekBarPosition);

.seekTo(seekBarPosition*

.getDuration()/100);

publicvoidrun(){

//TODOAuto-generatedmethodstubwhile(isRun){

try{

Thread.sleep(200);

}catch(InterruptedExceptione){

intposition=player.getCurrentPosition();

inttotal=player.getDuration();

Intentintent=newIntent("

.karl.progress"

intent.putExtra("

position"

position);

total"

total);

6

if(player.isPlaying()){

playing=true;

}else{

playing=false;

HandlermHandler=newHandler();

//歌词滚动线程

RunnablemRunnable=newRunnable(){

MusicActivity.lrc_view.SetIndex(LrcIndex());

MusicActivity.lrc_view.invalidate();

mHandler.postDelayed(mRunnable,100);

};

//创建对象

privateList<

LrcContent>

lrcList=newArrayList<

();

//初始化歌词检索值

privateintindex=0;

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

privateintCurrentTime=0;

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

privateintCountTime=0;

/**

*歌词同步处理类

*/

publicintLrcIndex(){

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

CurrentTime=player.getCurrentPosition();

//获得歌曲总时间长度

CountTime=player.getDuration();

7

if(CurrentTime<

CountTime){

for(inti=0;

i<

lrcList.size();

i++){

if(i<

lrcList.size()-1){

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

returnindex;

8

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

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

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

明;

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

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

onReceive;

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

Activity或者Service去处理。

通过这次实验,让我对Broadcast、尤其是Service有了更深入的认

识,还让我意识到编程方面和知识体系机构方面存在的不足。

总之,这次

试验让我Android编程能力有了一定的提高。

利用这次试验,也将我们的大

作业更加完善。

9

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

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2