Android视频音频播放.docx
- 文档编号:10785792
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:20
- 大小:35.35KB
Android视频音频播放.docx
《Android视频音频播放.docx》由会员分享,可在线阅读,更多相关《Android视频音频播放.docx(20页珍藏版)》请在冰豆网上搜索。
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
Iterator
.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"/> 完成各种音乐播放的操作功能。 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){ //
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 视频 音频 播放
![提示](https://static.bdocx.com/images/bang_tan.gif)