您的位置:首页 > 移动开发 > Android开发

Android开发——多媒体开发之MediaPlayer

2010-05-28 20:09 381 查看
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的属性对象供我们开发利用。

(由于文章太长,上传不来,故去掉一些方法的实现,如有需要源码请联系我)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: