Android实践:《简易影音播放器》的实现及简要说明

本文实现的简易影音播放器主要实现的功能,包括选取音乐文件,播放、暂停、停止、快进、快退,选取视频文件播放,音乐文件和视频文件都会给出文件名、文件路径的详细信息。主要涉及到MediaPlayer和VideoView的操作、旋转屏幕后重启活动还能继续上一次未完成的播放、还有Activity的生命周期等知识。

一、MediaPlayer播放音乐的流程

1、创建MediaPlayer对象
mper = new MediaPlayer();
2、要播放一首音乐时,必须先设置音乐的Uri并做好准备工作
mper.reset();					//如果之前播放过其他音乐,那么要先reset
mper.setDataSource(this,uri);	//指定音乐文件的Uri
mper.prepareAsync();			//准备播放,此时会引发一个“音乐准备好了”事件,稍后介绍
3、当音乐准备好之后,就可以用以下方法播放、暂停或停止播放,还可以设置是否要重复播放
mper.start();			//开始播放
mper.pause();			//暂停播放
mper.stop();			//停止播放
mper.setLooping(true);	//设置是否要重复播放(true为要)
注意:执行stop()停止播放后,若要再次播放相同的歌曲,则必须重新执行前面的mper.prepareAsync()准备播放,
而执行pause()暂停后,可以直接用start()继续播放。
4、MediaPlayer会记住当前的播放位置(以秒数为单位),我们可以用程序获取或移动播放位置
int len = mper.getDuration();		//获取音乐的总长度(秒数)
int pos = mper.getCurrentPosition();//获取当前的播放位置(秒数)
mper.seekTo(pos);					//移动播放位置到第 pos 秒的位置
5、当不再需要播放时,必须将MediaPlayer对象释放掉
mper.release();		

二、MediaPlayer的三个重要事件

1、实现MediaPlayer的三个事件监听接口
public class MainActivity extends Activity implements
        MediaPlayer.OnPreparedListener,   	//音乐准备好 监听事件
        MediaPlayer.OnErrorListener,		//发生错误时 监听事件
        MediaPlayer.OnCompletionListener{}	//播放完毕时 监听事件
2、可以使用当前活动对象的this作为事件监听器
mper.setOnPreparedListener(this);   
mper.setOnErrorListener(this);		
mper.setOnCompletionListener(this); 
3、3个监听接口的事件处理方法
public void onPrepared(MediaPlayer mp) {
	//音乐准备好时,准备要做的事情。。。
}
	
public boolean onError(MediaPlayer mp, int what, int extra) {
	//发生错误时要处理的事情。。。
	return false;
}

public void onCompletion(MediaPlayer mp) {
	//播放完毕时要处理的事情。。。
}

三、活动的生命周期
播放音乐时,用户可能会突然切换程序,然后又切换回来。再或者结束程序,这些都要妥善处理。
用户每次切换程序,回到程序,都是在Activity的生命周期内,直到活动结束。几个常用的事件如下所示:

onCreate()		//当活动启动时
onResume()		//当活动获得输入焦点时
onPause()		//当活动失去输入焦点时
onDestory()		//当活动结束时

以音乐播放为例,则音乐播放活动的生命周期如下:


(画图的时候少画了一个箭头,手动补上,啊哈哈。。)

当Activity失去输入焦点时就暂停音乐播放,重新获得输入焦点时,一般来说会继续音乐播放,但是直接播放又不合用户使用习惯,因为突然就响了,太吓人。所以最好还是保持暂停,等待用户操作。Activity结束时,要将MediaPlayer对象释放。

当然这个过程涉及到很多事情。例如切换程序的时候,正常的音乐播放器还是会继续播放音乐的,如果用户切换的是文本阅读程序,音乐不会暂停,如果是视频播放程序,音乐就会直接暂停,这里面涉及到很多知识,所以这个简单的播放器就直接切换程序就暂停音乐。手机关闭屏幕进入休眠状态也会失去输入焦点,从而触发onPause()事件,导致音乐暂停,这肯定有解决方案,本程序不打算处理这个问题,而是直接让手机不进入休眠状态,虽然反人类,不管了。在onCreate()中加入以下代码:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

四、使用VideoView搭配MediaController播放视频

1、VideoView可以播放视频文件,但是并没有提供现成的控制菜单,如进度条、控制按钮等。而MediaController可以提供播放时需要的控制组件,搭配VideoView非常合适。关联代码如下:

vdv = (VideoView)findViewById(R.id.videoView); //获取 VideoView 组件
MediaController mediaCtrl = new MediaController(this); //新建播放控制对象
vdv.setMediaController(mediaCtrl);  //设置要用播放控制对象来控制播放
注:使用MediaController需要导入android.widget.MediaController

MediaController只是交给用户操作,而在程序中控制播放的还是要使用VideoView提供的方法:

vdv.setVideoURI(uri);			//设置要播放视频的Uri
vdv.start();				//开始播放
vdv.pause();				//暂停播放
vdv.stopPlayback();			//停止播放
		
boolean b = vdv.isPlaying();		//是否在播放中

int len = vdv.getDuration();		//读取视频长度(秒)
int pos = vdv.ge
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值