大家好我们今天研究的是Android中很重要也最为复杂的媒体播放器---MediaPlayer.

Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的。

MediaPlayer在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个MediaPlayer程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制。

而我们今天的例子只是利用MediaPlayer来播放res/raw文件夹中一首非常动听的英文哥love fool.mp3.程序有三个ImageButton按钮,播放,停止,和暂停!三个按钮的功能我就不用多说.下面我将Step By Step教你如何完成本Demo的实现.

Step 1 :新建一个Android工程,命名为MediaPlayerDemo.

Step 2 :准备素材,在res下建一个raw文件夹,将foollove.mp3导入,将play.png,pause.png,及stop.png导入res/drawable文件夹下.

Step 3: 设计UI布局,在main.xml里放入三个ImageButton(这里可以用AbsoluteLayout,或者RelativeLayout实现,我用后者).代码如下:

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <RelativeLayout
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:background="@drawable/white"
  6. xmlns:android="http://schemas.android.com/apk/res/android"
  7. >
  8. <TextView
  9. android:id="@+id/myTextView1"
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"
  12. android:text="@string/hello"
  13. android:layout_alignParentTop="true"
  14. android:layout_alignParentLeft="true"
  15. >
  16. </TextView>
  17. <ImageButton
  18. android:id="@+id/myButton1"
  19. android:layout_width="wrap_content"
  20. android:layout_height="wrap_content"
  21. android:src="@drawable/play"
  22. android:layout_below="@+id/myTextView1"
  23. >
  24. </ImageButton>
  25. <ImageButton
  26. android:id="@+id/myButton3"
  27. android:layout_width="wrap_content"
  28. android:layout_height="wrap_content"
  29. android:src="@drawable/pause"
  30. android:layout_alignTop="@+id/myButton1"
  31. android:layout_toRightOf="@+id/myButton1"
  32. >
  33. </ImageButton>
  34. <ImageButton
  35. android:id="@+id/myButton2"
  36. android:layout_width="wrap_content"
  37. android:layout_height="wrap_content"
  38. android:src="@drawable/stop"
  39. android:layout_alignTop="@+id/myButton1"
  40. android:layout_toRightOf="@+id/myButton3"
  41. >
  42. </ImageButton>
  43. </RelativeLayout>

Step 4 :主控制程序MediaPlayerDemo.java的实现,代码如下:

  1. packagecom.android.test;
  2. importandroid.app.Activity;
  3. importandroid.media.MediaPlayer;
  4. importandroid.os.Bundle;
  5. importandroid.view.View;
  6. importandroid.widget.ImageButton;
  7. importandroid.widget.TextView;
  8. publicclassMediaPlayerDemoextendsActivity{
  9. privateImageButtonmb1,mb2,mb3;
  10. privateTextViewtv;
  11. privateMediaPlayermp;
  12. //声明一个变量判断是否为暂停,默认为false
  13. privatebooleanisPaused=false;
  14. publicvoidonCreate(BundlesavedInstanceState){
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.main);
  17. //通过findViewById找到资源
  18. mb1=(ImageButton)findViewById(R.id.myButton1);
  19. mb2=(ImageButton)findViewById(R.id.myButton2);
  20. mb3=(ImageButton)findViewById(R.id.myButton3);
  21. tv=(TextView)findViewById(R.id.myTextView1);
  22. //创建MediaPlayer对象,将raw文件夹下的lovefool.mp3
  23. mp=MediaPlayer.create(this,R.raw.lovefool);
  24. //增加播放音乐按钮的事件
  25. mb1.setOnClickListener(newImageButton.OnClickListener(){
  26. @Override
  27. publicvoidonClick(Viewv){
  28. try{
  29. if(mp!=null)
  30. {
  31. mp.stop();
  32. }
  33. mp.prepare();
  34. mp.start();
  35. tv.setText("音乐播放中...");
  36. }catch(Exceptione){
  37. tv.setText("播放发生异常...");
  38. e.printStackTrace();
  39. }
  40. }
  41. });
  42. mb2.setOnClickListener(newImageButton.OnClickListener(){
  43. @Override
  44. publicvoidonClick(Viewv){
  45. try{
  46. if(mp!=null)
  47. {
  48. mp.stop();
  49. tv.setText("音乐停止播放...");
  50. }
  51. }catch(Exceptione){
  52. tv.setText("音乐停止发生异常...");
  53. e.printStackTrace();
  54. }
  55. }
  56. });
  57. mb3.setOnClickListener(newImageButton.OnClickListener(){
  58. @Override
  59. publicvoidonClick(Viewv){
  60. try{
  61. if(mp!=null)
  62. {
  63. if(isPaused==false)
  64. {
  65. mp.pause();
  66. isPaused=true;
  67. tv.setText("停止播放!");
  68. }
  69. elseif(isPaused==true)
  70. {
  71. mp.start();
  72. isPaused=false;
  73. tv.setText("开始播发!");
  74. }
  75. }
  76. }catch(Exceptione){
  77. tv.setText("发生异常...");
  78. e.printStackTrace();
  79. }
  80. }
  81. });
  82. /*当MediaPlayer.OnCompletionLister会运行的Listener*/
  83. mp.setOnCompletionListener(
  84. newMediaPlayer.OnCompletionListener()
  85. {
  86. //@Override
  87. /*覆盖文件播出完毕事件*/
  88. publicvoidonCompletion(MediaPlayerarg0)
  89. {
  90. try
  91. {
  92. /*解除资源与MediaPlayer的赋值关系
  93. *让资源可以为其它程序利用*/
  94. mp.release();
  95. /*改变TextView为播放结束*/
  96. tv.setText("音乐播发结束!");
  97. }
  98. catch(Exceptione)
  99. {
  100. tv.setText(e.toString());
  101. e.printStackTrace();
  102. }
  103. }
  104. });
  105. /*当MediaPlayer.OnErrorListener会运行的Listener*/
  106. mp.setOnErrorListener(newMediaPlayer.OnErrorListener()
  107. {
  108. @Override
  109. /*覆盖错误处理事件*/
  110. publicbooleanonError(MediaPlayerarg0,intarg1,intarg2)
  111. {
  112. //TODOAuto-generatedmethodstub
  113. try
  114. {
  115. /*发生错误时也解除资源与MediaPlayer的赋值*/
  116. mp.release();
  117. tv.setText("播放发生异常!");
  118. }
  119. catch(Exceptione)
  120. {
  121. tv.setText(e.toString());
  122. e.printStackTrace();
  123. }
  124. returnfalse;
  125. }
  126. });
  127. }
  128. }

Step 5: 运行效果如下,一首动听的love fool在播放...享受中...

Android 中级教程(一)之------Android MediaPlayer播放mp3的实例!Android 中级教程(一)之------Android MediaPlayer播放mp3的实例!Android 中级教程(一)之------Android MediaPlayer播放mp3的实例!Android 中级教程(一)之------Android MediaPlayer播放mp3的实例!

扩散学习:

如果我们想播放手机卡里的音乐,或者URL下载流媒体来播放,示意程序如下:

  1. MediaPlayermp=newMediaPlayer();
  2. mp.setDataSource(StringURL/FILE_PATH);
  3. mp.prepare();
  4. mp.start();

以上程序主要是通过MediaPlayer.setDataSource() 的方法,将URL或文件路径以字符串的方式传入.使用setDataSource ()方法时,要注意以下三点:

1.构建完成的MediaPlayer 必须实现Null 对像的检查.

2.必须实现接收IllegalArgumentException 与IOException 等异常,在很多情况下,你所用的文件当下并不存在.

3.若使用URL 来播放在线媒体文件,该文件应该要能支持pragressive 下载.

本文出自 “Android_Tutor” 博客,请务必保留此出处http://weizhulin.blog.51cto.com/1556324/311694

更多相关文章

  1. NDK编程实例
  2. Java和Android Http连接程序:使用java.net.URL 下载服务器图片到
  3. WebView---Android与js交互实例
  4. android初学者的探索之路(Android音乐播放器)
  5. 用Gradle 构建你的android程序

随机推荐

  1. 图片压缩
  2. Android:BroadcastReceiver
  3. android 异常 记录
  4. Android zip、tar+gz 压缩解压
  5. Android Code name Version API level
  6. android internals
  7. Android RSA 公钥加密、解密
  8. //转//Revisiting Android disk encrypti
  9. Android生命周期实验
  10. Android选择一段日期