Android开发——多媒体开发之MediaPlayer
2010-05-28 20:09 HalZhang 阅读(16566) 评论(11) 编辑 收藏 举报MediaPlayer可以用来播放视频和音频、流媒体。MediaPlayer的生命周期如下图:
从MediaPlayer的生命周期图,可以看出使用MediaPlayer不是很复杂。
最简单的流程:初始化->resrt()->setDataSource()->prepare()->start()->……只要简单的几步,就可以播放音频文件了。
来看看一个播放音频的例子吧,看代码和注释吧……
1: private Handler handler = new Handler() {
2:
3: public void handleMessage(Message msg) {
4: //更新进度条
5: progressBar.setProgress(progressState);
6: };
7: };
8:
9: /**
10: * 播放
11: *
12: * @param filePath
13: * 文件路径
14: */
15: private void playMusic(String filePath) {
16: try {
17: progressState = 0;
18: progressBar.setProgress(0);
19: // 重置
20: mediaPlayer.reset();
21: // 设置数据源
22: mediaPlayer.setDataSource(filePath);
23: // 准备播放
24: mediaPlayer.prepare();
25: // 获取播放时长
26: length = mediaPlayer.getDuration();
27: progressBar.setMax(length / 1000);
28: // 播放
29: mediaPlayer.start();
30: new Thread(new ProcessBarRefresh()).start();
31: // 设置播放完毕监听
32: mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
33: @Override
34: public void onCompletion(MediaPlayer mp) {
35: nextMusic();
36: }
37: });
38:
39: } catch (Exception e) {
40: displayToast(e.getMessage());
41: }
42: }
43:
44: /**
45: * 更新进度条
46: * @author 张汉国
47: */
48: class ProcessBarRefresh implements Runnable{
49:
50: @Override
51: public void run() {
52: while(isPlaying){
53: progressState = mediaPlayer.getCurrentPosition()/1000;
54: handler.sendMessage(handler.obtainMessage());
55: }
56: }
57:
58: }
以上只是一个简单的实例,要开发一个播放器除了UI需要下功夫外,还得注意不少细节东西。
Android中音乐播放是一个后台进程,以上代码当调用 onStop()->onCreate() 的时候会重复加载播放列表,造成列表重复。这就需要用到 onSaveIntanceState(),这样子在onCreate()里面初始化播放列表的时候先判断 Bundle 是否为空,是否能拿到播放列表,如果拿不到在重新初始化。
再者Android自身也提供一个MediaStore这样一个Provider的属性对象供我们开发利用。
(由于文章太长,上传不来,故去掉一些方法的实现,如有需要源码请联系我)