Android视频音频播放.docx

上传人:b****3 文档编号:4634235 上传时间:2023-05-07 格式:DOCX 页数:20 大小:35.35KB
下载 相关 举报
Android视频音频播放.docx_第1页
第1页 / 共20页
Android视频音频播放.docx_第2页
第2页 / 共20页
Android视频音频播放.docx_第3页
第3页 / 共20页
Android视频音频播放.docx_第4页
第4页 / 共20页
Android视频音频播放.docx_第5页
第5页 / 共20页
Android视频音频播放.docx_第6页
第6页 / 共20页
Android视频音频播放.docx_第7页
第7页 / 共20页
Android视频音频播放.docx_第8页
第8页 / 共20页
Android视频音频播放.docx_第9页
第9页 / 共20页
Android视频音频播放.docx_第10页
第10页 / 共20页
Android视频音频播放.docx_第11页
第11页 / 共20页
Android视频音频播放.docx_第12页
第12页 / 共20页
Android视频音频播放.docx_第13页
第13页 / 共20页
Android视频音频播放.docx_第14页
第14页 / 共20页
Android视频音频播放.docx_第15页
第15页 / 共20页
Android视频音频播放.docx_第16页
第16页 / 共20页
Android视频音频播放.docx_第17页
第17页 / 共20页
Android视频音频播放.docx_第18页
第18页 / 共20页
Android视频音频播放.docx_第19页
第19页 / 共20页
Android视频音频播放.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Android视频音频播放.docx

《Android视频音频播放.docx》由会员分享,可在线阅读,更多相关《Android视频音频播放.docx(20页珍藏版)》请在冰点文库上搜索。

Android视频音频播放.docx

Android视频音频播放

1、课程名称:

Android音频视频播放

 

2、知识点

2.1、上次课程的主要知识点

 

2.2、本次预计讲解的知识点

 

3、具体内容

3.1、Activity生命周期及其应用(重点)

Activity在创建到销毁的过程中也经历过多个方法来监听其生命周期执行过程。

其中,主要有以下几个方法:

1)onCreate:

当Activity在创建后,自动执行此方法,来对Activity中的布局和组件进行一些初始化。

2)onDestory:

当Activity退出销毁时自动执行的方法,主要用来进行一些收尾和垃圾回收的工作。

3)onStart

4)onResume

5)onPause

6)onStop

7)onRestart

使用一张流程图来查看整个Activity的生命周期。

生命周期的这些监听方法主要可以在以下功能中使用:

1)退出功能,可以在onCreate中记录下当前经历过的Activity类,在onDestory中将记录的Activity移除。

只需要将打开过的所有Activity统一关闭,即可实现退出整个程序的功能。

2)当从详细界面返回到列表界面时,进行数据刷新功能。

3)onDestory中是否音乐播放器的内存。

应用生命周期的功能,实现面试宝典中的退出系统功能。

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

allActiveActivities.add(this);

}

@Override

protectedvoidonDestroy(){

//将当前要退出的Activity从所有活动的Activity集合中删除

try{

allActiveActivities.remove(this);

}catch(Exceptione){

e.printStackTrace();

}

super.onDestroy();

}

当点击退出时,需要将整个集合中所有的Activity关闭。

exit.setOnClickListener(newOnClickListener(){

@Override

publicvoidonClick(Viewv){

//循环迭代所有活动的Activity

Iteratoriter=allActiveActivities

.iterator();

while(iter.hasNext()){

iter.next().finish();

}

}

});

3.2、SeekBar拖动条(掌握)

使用SeekBar组件,可以实现一个拖动条,用来完成调整亮度,改变音乐播放位置等功能。

android="

xmlns:

tools="

android:

layout_width="match_parent"

android:

layout_height="wrap_content"

android:

orientation="vertical">

android:

id="@+id/seekbar"

android:

layout_width="match_parent"

android:

layout_height="wrap_content"

android:

max="100"

android:

progress="50"/>

android:

id="@+id/result"

android:

layout_width="match_parent"

android:

layout_height="wrap_content"

android:

text="当前选择的值为:

50"/>

也可以加入监听功能。

publicclassMainActivityextendsActivity{

privateSeekBarseekbar;

privateTextViewresult;

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

Globals.init(this);

//设置所使用的布局界面

setContentView(R.layout.activity_main);

seekbar=(SeekBar)findViewById(R.id.seekbar);

result=(TextView)findViewById(R.id.result);

seekbar.setOnSeekBarChangeListener(newOnSeekBarChangeListener(){

@Override

publicvoidonStopTrackingTouch(SeekBarseekBar){

result.setText("停止拖动");

}

@Override

publicvoidonStartTrackingTouch(SeekBarseekBar){

result.setText("开始拖动");

}

@Override

publicvoidonProgressChanged(SeekBarseekBar,intprogress,

booleanfromUser){

result.setText("正在拖动,当前的值为:

"+progress);

}

});

}

}

3.3、音乐播放器(掌握)

在进行音频和视频播放时,都需要使用MediaPlayer类来加载音频或视频文件。

同时要注意,如果想使用模拟器播放音频时,不能使用snapshot。

同时还要注意,如果使用win7+模拟器播放音频时,必须使用管理员身份启动Eclipse,否则SD卡无法识别。

准备工作都完成后,可以开始初始化音频播放的类,MediaPlayer这个类也有自己的生命周期。

可以通过其API文档来查看生命周期的执行流程:

1)建立对象后,MediaPlayer对象会默认处于空闲状态(idle)

2)需要为其设置播放的数据来源(音频或视频文件)

3)调用prepare()方法,将里面的一些信息读入并准备好。

4)准备好后,才可以调用start()进行播放

5)如果设置了循环播放(looping=true)且歌曲已经播放完成,则会自动重新播放。

6)在播放状态下,调用pause()方法会进入暂停状态,再次调用start()即可继续播放。

7)如果没有设置循环播放(Looping=false),且音乐播放完成,会自动进入播放完成状态,这时如果再次调用start(),则会重新开始当前歌曲的播放。

8)停止状态不会自动进入,必须调用stop方法才会进入这个状态。

9)如果想完整的释放所有内存,需要调用release()方法来完成。

这里先完成一个基本的歌曲播放功能,没有界面。

publicclassMainActivityextendsActivity{

privateMediaPlayerplayer;

privateStringfilePath="/mnt/sdcard/a.mp3";

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//初始化

player=newMediaPlayer();

try{

//设置要播放的文件

player.setDataSource(filePath);

//进行准备操作

player.prepare();

//开始播放

player.start();

}catch(Exceptione){

e.printStackTrace();

Toast.makeText(this,"当前加载的音乐有问题,请确定文件格式是否正确!

",Toast.LENGTH_LONG)

.show();

}

}

@Override

protectedvoidonDestroy(){

//退出时释放音乐

if(player!

=null){

if(player.isPlaying()){

player.stop();

}

player.release();

}

super.onDestroy();

}

}

设计界面,加入播放,暂停,上一首,下一首,以及所有歌曲列表等界面组件。

android="

xmlns:

tools="

android:

layout_width="match_parent"

android:

layout_height="match_parent"

android:

background="#cccccc"

android:

orientation="vertical">

android:

id="@+id/music_name"

android:

layout_width="match_parent"

android:

layout_height="0dp"

android:

layout_weight="1"

android:

gravity="center"

android:

text="@string/hello_world"

android:

textColor="#000000"

android:

textSize="16sp"/>

android:

layout_width="match_parent"

android:

layout_height="0dp"

android:

layout_weight="2"

android:

orientation="horizontal">

android:

layout_width="0dp"

android:

layout_height="match_parent"

android:

layout_weight="1"/>

android:

layout_width="0dp"

android:

layout_height="match_parent"

android:

layout_weight="1"

android:

background="@drawable/audio_identify_start_default"/>

android:

layout_width="0dp"

android:

layout_height="match_parent"

android:

layout_weight="1"/>

android:

id="@+id/list"

android:

layout_width="match_parent"

android:

layout_height="0dp"

android:

layout_weight="3">

android:

id="@+id/seekbar"

android:

layout_width="match_parent"

android:

layout_height="0dp"

android:

layout_weight="0.5"/>

android:

id="@+id/time_text"

android:

layout_width="match_parent"

android:

layout_height="0dp"

android:

layout_weight="0.5"

android:

gravity="center"

android:

text="00:

00/00:

00"

android:

textColor="#000000"

android:

textSize="12sp"/>

android:

layout_width="match_parent"

android:

layout_height="0dp"

android:

layout_weight="1"

android:

gravity="center"/>

android:

layout_width="match_parent"

android:

layout_height="0dp"

android:

layout_weight="1"

android:

orientation="horizontal">

android:

layout_width="0dp"

android:

layout_height="match_parent"

android:

layout_weight="0.5"/>

android:

id="@+id/pre_btn"

android:

layout_width="0dp"

android:

layout_height="match_parent"

android:

layout_weight="1"

android:

background="@drawable/ic_player_prev_default"/>

android:

layout_width="0dp"

android:

layout_height="match_parent"

android:

layout_weight="1"/>

android:

id="@+id/play_btn"

android:

layout_width="0dp"

android:

layout_height="match_parent"

android:

layout_weight="1.5"

android:

background="@drawable/ic_player_play_default"/>

android:

layout_width="0dp"

android:

layout_height="match_parent"

android:

layout_weight="1"/>

android:

id="@+id/next_btn"

android:

layout_width="0dp"

android:

layout_height="match_parent"

android:

layout_weight="1"

android:

background="@drawable/ic_player_next_default"/>

android:

layout_width="0dp"

android:

layout_height="match_parent"

android:

layout_weight="0.5"/>

完成各种音乐播放的操作功能。

publicclassMainActivityextendsActivity{

privateMediaPlayerplayer;

privateStringfilePath="/mnt/sdcard/a.mp3";

privateStringsongName="FlyMeToTheMoon";

//音乐名称

privateTextViewmusicName;

//播放时间长度的文本

privateTextViewtimeText;

//拖动条

privateSeekBarseekbar;

//播放/暂停按钮

privateButtonplayBtn;

//上一首

privateButtonpreBtn;

//下一首

privateButtonnextBtn;

//总播放时长的文本

privateStringdurationTimeStr;

//建立消息通道,以便在子线程中修改界面

privateHandlerhandler;

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

handler=newHandler(){

@Override

publicvoidhandleMessage(Messagemsg){

seekbar.setProgress(player.getCurrentPosition());

timeText.setText(getTextByMs(player.getCurrentPosition())+"/"

+durationTimeStr);

}

};

//取得所有组件

musicName=(TextView)findViewById(R.id.music_name);

timeText=(TextView)findViewById(R.id.time_text);

seekbar=(SeekBar)findViewById(R.id.seekbar);

playBtn=(Button)findViewById(R.id.play_btn);

preBtn=(Button)findViewById(R.id.pre_btn);

nextBtn=(Button)findViewById(R.id.next_btn);

//初始化

player=newMediaPlayer();

try{

//设置要播放的文件

player.setDataSource(filePath);

//进行准备操作

player.prepare();

//player.start();

//初始化拖动条的总长度

seekbar.setMax(player.getDuration());

durationTimeStr=getTextByMs(player.getDuration());

//修改歌曲标题

musicName.setText(songName);

//设置显示的播放时间

timeText.setText("00:

00/"+durationTimeStr);

}catch(Exceptione){

e.printStackTrace();

Toast.makeText(this,"当前加载的音乐有问题,请确定文件格式是否正确!

",Toast.LENGTH_LONG)

.show();

}

//加入一个多线程,通过子线程控制拖动条以及显示时间的改变

Threadt=newThread(){

@Override

publicvoidrun(){

while(true){

try{

Thread.sleep(1000);

//取得当前的播放时间位置,设置到拖动条里

if(player.isPlaying()){

//传递一个空消息,不需要有具体的消息内容,因为消息通道中只有一个固定的操作,而且不需要参数.

handler.sendEmptyMessage(0);

}

}catch(Exceptione){

e.printStackTrace();

}

}

}

};

t.start();

//为播放按钮加监听

playBtn.setOnClickListener(newOnClickListener(){

@Override

publicvoidonClick(Viewv){

if(player.isPlaying()){

player.pause();

playBtn.setBackgroundResource(R.drawable.ic_player_play_default);

}else{

player.start();

playBtn.setBackgroundResource(R.drawable.ic_player_pause_default);

}

}

});

//开始播放

playBtn.performClick();

//加入拖动条的监听

seekbar.setOnSeekBarChangeListener(newOnSeekBarChangeListener(){

@Override

publicvoidonStopTrackingTouch(SeekBarseekBar){

//

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

当前位置:首页 > 法律文书 > 调解书

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

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