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

原文:http://weizhulin.blog.51cto.com/1556324/311694

大家好我们今天研究的是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. <?xml version="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> 
  44.  

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

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

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

    

   

   

扩散学习:

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

  1. MediaPlayer mp = new MediaPlayer();   
  2.  
  3. mp.setDataSource(String URL/FILE_PATH);   
  4.  
  5. mp.prepare();   
  6.  
  7. mp.start();   
  8.  

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

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

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

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

posted on 2012-08-09 15:49  亭子  阅读(248)  评论(0编辑  收藏  举报

导航