MediaPlayer类

从头学Android之多媒体--使用MediaPlayer播放音频 _Android

静态构造方法

方法名称

描述

public static MediaPlayer create(Context context, Uri uri, SurfaceHolder holder)

指定从资源ID对应的资源文件中来装载音乐文件,同时指定了SurfaceHolder对象并返回MediaPlyaer对象

public static MediaPlayer create(Context context, int resid)

指定从资源ID对应的资源文件中来装载音乐文件,并返回MediaPlyaer对象

public static MediaPlayer create(Context context, Uri uri)

指定从Uri对应的资源文件中来装载音乐文件,并返回MediaPlyaer对象

 

常用方法

方法名称

描述

public void start ()

开始或恢复播放

public void stop()

停止播放

public void pause()

暂停播放

public void setDataSource (String path)

从指定的装载path路径所代表的文件

public void setDataSource (FileDescriptor fd, long offset, long length)

指定装载fd所代表的文件中从offset开始、长度为length的文件内容

public void setDataSource (FileDescriptor fd)

指定装载fd所代表的文件

public void setDataSource (Context context, Uri uri)

指定装载uri所代表的文件

public void setDataSource (Context context, Uri uri, Map<String, String> headers)

指定装载uri所代表的文件

public void prepare()

预期准备,因为setDataSource()方法之后,MediaPlayer并未真正的去装载那些音频文件,需要调用prepare()这个方法去准备音频

public void setLooping(boolean looping)

设置是否循环播放这个音乐文件

public void setSurface(Surface surface)

设置Surface

public void setVolume(float leftVolume,float rightVolume)

设置音量

public void setDisplay(SurfaceHolder sh)

设置显示方式

public void seekTo(int mses)

寻求指定的时间位置。

public void isLooping()

判断是否循环播放

public void isPlaying()

判断是否正在播放

public void release()

释放相关该MediaPlayer对象的资源。

 

绑定事件监听器

监听器

描述

public void setOnCompletionListener (MediaPlayer.OnCompletionListener listener)

为MediaPlayer的播放完成事件绑定事件监听器

public void setOnErrorListener (MediaPlayer.OnErrorListener listener)

为MediaPlayer的播放错误事件绑定事件监听器

public void setOnPreparedListener (MediaPlayer.OnPreparedListener listener)

当MediaPlayer调用prepare()方法时触发该监听器

public void setOnSeekCompleteListener (MediaPlayer.OnSeekCompleteListener listener)

当MediaPlayer调用seek()方法的时候触发该监听器

 

播放音频

1、播放应用的资源文件(res/raw/)

通过我们上面介绍的几个静态构造函数创建MediaPlayer对象

 

  1. MediaPlayer  mediaPlayer = MediaPlayer.create(MediaPlayerDemoActivity.this,R.raw.a1);  
  2.  

2、播放应用的原始资源文件(assets)

1) 通过Context.getAssets()方法获得AssetManager对象

2) 通过AssetManager对象的openFd(String name)方法打开指定的原生资源文件夹,返回一个AssetFileDescriptor对象

3) 通过AssetFileDescriptor的getFileDescriptor()得到一个FileDescriptor对象

4) 通过public void setDataSource (FileDescriptor fd, long offset, long length)来创建MediaPlayer对象

5) 调用MediaPlayer.prepare()方法准备音频

6) 调用MediaPlayer的start()、pause()、stop()等方法控制

 

  1. AssetFileDescriptor fileDescriptor = assetManager.openFd("a2.mp3"); 
  2.             mediaPlayer = new MediaPlayer();  
  3.            mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),fileDescriptor.getStartOffset(), fileDescriptor.getLength());  
  4.             mediaPlayer.prepare();     
  5.         mediaPlayer.start();  

3、播放外部存储上的音频资源文件(sdcard)

1) 创建MediaPlayer对象,通过MediaPlayer对象的setDataSource(String path)方法装载预定的音频文件

2) 调用MediaPlayer对象的prepare()方法准备音频

3) 调用MediaPlayer的start()、pause()、stop()等方法控制

  1.     mediaPlayer = new MediaPlayer();  
  2.            mediaPlayer.setDataSource("/mnt/sdcard/a3.mp3");  
  3.            mediaPlayer.prepare();  
  4.            mediaPlayer.start();   

4、播放网络上的音频文件

1) 根据网络上的地址创建Uri对象

2) 通过public void setDataSource (Context context, Uri uri)设置音频来源装载音频文件

3) 调用MediaPlayer对象的prepare()方法准备音频

4) 调用MediaPlayer的start()、pause()、stop()等方法控制

 

  1. mediaPlayer = new MediaPlayer();  
  2.  
  3.            // 通过Uri解析一个网络地址  
  4.  
  5.            Uri uri = Uri.parse("http://zhangmenshiting2.baidu.com/data2/music/9138619/9138619.mp3?xcode=dd0d0d0df7218eb9a79c7fd72cefb648&mid=0.18926789458694");  
  6.  
  7.            mediaPlayer.setDataSource(MediaPlayerDemoActivity.this, uri
  8.            mediaPlayer.prepare();  
  9. mediaPlayer.start();  
  10.  

当然也可以通过我们的另一种静态构造方法直接创建一个MediaPlayer对象

  1. Uri uri = Uri.parse("http://zhangmenshiting2.baidu.com/data2/music/9138619/9138619.mp3?xcode=dd0d0d0df7218eb9a79c7fd72cefb648&mid=0.18926789458694");  
  2.   
  3. mediaPlayer = MediaPlayer.create(MediaPlayerDemoActivity.this,uri);  
  4.  
  5.         mediaPlayer.start();  

 

实现效果:

从头学Android之多媒体--使用MediaPlayer播放音频 _Android_02

贴上源代码:

 

  1. package com.jiahui.media;  
  2.  
  3. import java.io.IOException;  
  4.  
  5. public class MediaPlayerDemoActivity extends Activity implements 
  6.         OnClickListener {  
  7.  
  8.     private Button btnAppStart, btnAssetsStart, btnSdcardStart,  
  9.             btnNetworkStart;  
  10.  
  11.     public void onCreate(Bundle savedInstanceState) {  
  12.         super.onCreate(savedInstanceState);  
  13.         setContentView(R.layout.main);  
  14.  
  15.         btnAppStart = (Button) this.findViewById(R.id.btnAppStart);  
  16.         btnAssetsStart = (Button) this.findViewById(R.id.btnAssetsStart);  
  17.         btnSdcardStart = (Button) this.findViewById(R.id.btnSdcardStart);  
  18.         btnNetworkStart = (Button) this.findViewById(R.id.btnNetworkStart);  
  19.  
  20.         btnAppStart.setOnClickListener(this);  
  21.         btnAssetsStart.setOnClickListener(this);  
  22.         btnSdcardStart.setOnClickListener(this);  
  23.         btnNetworkStart.setOnClickListener(this);  
  24.  
  25.     }  
  26.  
  27.     @Override 
  28.     public void onClick(View v) {  
  29.         MediaPlayer mediaPlayer = null;  
  30.         switch (v.getId()) {  
  31.         case R.id.btnAppStart:  
  32.             System.out.println("---播放应用的资源文件----");  
  33.             // 使用raw下的资源文件创建MediaPlayer对象  
  34.             mediaPlayer = MediaPlayer.create(MediaPlayerDemoActivity.this,  
  35.                     R.raw.a1);  
  36.             mediaPlayer.start();  
  37.             break;  
  38.         case R.id.btnAssetsStart:  
  39.             System.out.println("---播放assest的资源文件----");  
  40.             AssetManager assetManager = this.getAssets();  
  41.             try {  
  42.                 AssetFileDescriptor fileDescriptor = assetManager  
  43.                         .openFd("a2.mp3");  
  44.                 mediaPlayer = new MediaPlayer();  
  45.                 mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),  
  46.                         fileDescriptor.getStartOffset(),  
  47.                         fileDescriptor.getLength());  
  48.  
  49.                 mediaPlayer.prepare();  
  50.                 mediaPlayer.start();  
  51.             } catch (IOException e) {  
  52.                 // TODO Auto-generated catch block  
  53.                 e.printStackTrace();  
  54.             }  
  55.             break;  
  56.         case R.id.btnSdcardStart:  
  57.             System.out.println("---播放SDcard上的文件---");  
  58.             try {  
  59.                 mediaPlayer = new MediaPlayer();  
  60.                 mediaPlayer.setDataSource("/mnt/sdcard/a3.mp3");  
  61.                 mediaPlayer.prepare();  
  62.                 mediaPlayer.start();  
  63.             } catch (Exception e) {  
  64.             }  
  65.             break;  
  66.         case R.id.btnNetworkStart:  
  67.             System.out.println("播放网络上的音频");  
  68.             // http://zhangmenshiting2.baidu.com/data2/music/9138619/9138619.mp3?  
  69.             // xcode=dd0d0d0df7218eb9a79c7fd72cefb648&mid=0.18926789458694  
  70.             try {  
  71.                 // mediaPlayer = new MediaPlayer();  
  72.                 // 通过Uri解析一个网络地址  
  73.                 Uri uri = Uri  
  74.                         .parse("http://zhangmenshiting2.baidu.com/data2/music/9138619/9138619.mp3?xcode=dd0d0d0df7218eb9a79c7fd72cefb648&mid=0.18926789458694");  
  75.                 mediaPlayer.setDataSource(MediaPlayerDemoActivity.this, uri);  
  76.  
  77.                 // mediaPlayer.prepare();  
  78.                 // 也可以直接通过这种方式装载网络上的音频文件  
  79.                 mediaPlayer = MediaPlayer.create(MediaPlayerDemoActivity.this,  
  80.                         uri);  
  81.                 mediaPlayer.start();  
  82.             } catch (Exception e) {  
  83.                 // TODO: handle exception  
  84.             }  
  85.  
  86.             break;  
  87.  
  88.         default:  
  89.             break;  
  90.         }  
  91.     }  

如需转载引用请注明出处:http://blog.csdn.net/jiahui524

源代码下载:http://download.csdn.net/detail/jiahui524/3847987