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

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

2010-05-28 20:09 by HalZhang, 11550 阅读, 10 评论, 收藏, 编辑

MediaPlayer可以用来播放视频和音频、流媒体。MediaPlayer的生命周期如下图:

mediaplayer_state_diagram 

从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:     }

 

music 界面没有美化播放中 播放中

以上只是一个简单的实例,要开发一个播放器除了UI需要下功夫外,还得注意不少细节东西。

Android中音乐播放是一个后台进程,以上代码当调用 onStop()->onCreate() 的时候会重复加载播放列表,造成列表重复。这就需要用到 onSaveIntanceState(),这样子在onCreate()里面初始化播放列表的时候先判断 Bundle 是否为空,是否能拿到播放列表,如果拿不到在重新初始化。

再者Android自身也提供一个MediaStore这样一个Provider的属性对象供我们开发利用。

(由于文章太长,上传不来,故去掉一些方法的实现,如有需要源码请联系我)

2
0
(请您对文章做出评价)
« 上一篇: Android开发——应用程序生命周期
» 下一篇: Android开发——嘀咕客户端Demo版
Add your comment
  1. #1楼 tanliang   2010-08-16 14:06
    学习了,能否发生源代码!dot_net@sina.com
  2. #2楼 伍业雄   2010-12-10 16:06
    我也很想要一份源码 可以嘛.在有空的时候抽时间发一下给我学习 谢谢了哦
  3. #3楼 wangqilin8888   2011-03-29 11:03
    我也想要,能不能帮忙发到邮箱一下呢,谢谢:wangqilin8888@163.com
  4. #4楼 探索者的远见   2012-04-09 16:57
    学习了,顶楼主,能不能发下源码,495324358@qq.com,THX
  5. #5楼 FinalHazel   2012-04-12 17:29
    顶楼主啊~我也需要源码~尤其是第一章的照相机部分~1085893365@qq.com
  6. #6楼 疯狂的石头陈   2013-07-31 09:19
    发份源码我学习下 学些啦 chenlei_0502@qq.com
  7. #7楼 陈小贤   2013-11-28 21:26
    真心学习了,赞!这个音乐播放器能不能发一下源代码到我邮箱里面1191577478@qq.com,谢谢!
  8. #8楼 gggggg326   2014-07-21 16:29
    谢谢楼主分享,我最近也在做这个,求源码
  9. #9楼 gggggg326   2014-07-21 16:30
    307383642@qq.com
  10. #10楼 窗外的风景   2015-04-20 15:21
    1940565952@qq.com求源码,谢谢楼主了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值