24、从头学Android之多媒体--使用MediaPlayer播放音频
2011-11-27 13:09
489 查看
MediaPlayer类
静态构造方法
常用方法
绑定事件监听器
播放音频
1、播放应用的资源文件(res/raw/)
通过我们上面介绍的几个静态构造函数创建MediaPlayer对象
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()等方法控制
3、播放外部存储上的音频资源文件(sdcard)
1) 创建MediaPlayer对象,通过MediaPlayer对象的setDataSource(String path)方法装载预定的音频文件
2) 调用MediaPlayer对象的prepare()方法准备音频
3) 调用MediaPlayer的start()、pause()、stop()等方法控制
4、播放网络上的音频文件
1) 根据网络上的地址创建Uri对象
2) 通过public void setDataSource (Context context, Uri uri)设置音频来源装载音频文件
3) 调用MediaPlayer对象的prepare()方法准备音频
4) 调用MediaPlayer的start()、pause()、stop()等方法控制
当然也可以通过我们的另一种静态构造方法直接创建一个MediaPlayer对象
实现效果:
贴上源代码:
如需转载引用请注明出处:http://blog.csdn.net/jiahui524
源代码下载:http://download.csdn.net/detail/jiahui524/3847987
静态构造方法
方法名称 | 描述 |
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对象
MediaPlayer mediaPlayer = MediaPlayer.create(MediaPlayerDemoActivity.this, R.raw.a1);
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()等方法控制
AssetFileDescriptor fileDescriptor = assetManager .openFd("a2.mp3"); mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(), fileDescriptor.getStartOffset(), fileDescriptor.getLength()); mediaPlayer.prepare();mediaPlayer.start();
3、播放外部存储上的音频资源文件(sdcard)
1) 创建MediaPlayer对象,通过MediaPlayer对象的setDataSource(String path)方法装载预定的音频文件
2) 调用MediaPlayer对象的prepare()方法准备音频
3) 调用MediaPlayer的start()、pause()、stop()等方法控制
mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource("/mnt/sdcard/a3.mp3"); mediaPlayer.prepare(); mediaPlayer.start();
4、播放网络上的音频文件
1) 根据网络上的地址创建Uri对象
2) 通过public void setDataSource (Context context, Uri uri)设置音频来源装载音频文件
3) 调用MediaPlayer对象的prepare()方法准备音频
4) 调用MediaPlayer的start()、pause()、stop()等方法控制
mediaPlayer = new MediaPlayer(); // 通过Uri解析一个网络地址 Uri uri = Uri .parse("http://zhangmenshiting2.baidu.com/data2/music/9138619/9138619.mp3?xcode=dd0d0d0df7218eb9a79c7fd72cefb648&mid=0.18926789458694"); mediaPlayer.setDataSource(MediaPlayerDemoActivity.this, uri); mediaPlayer.prepare(); mediaPlayer.start();
当然也可以通过我们的另一种静态构造方法直接创建一个MediaPlayer对象
Uri uri = Uri .parse("http://zhangmenshiting2.baidu.com/data2/music/9138619/9138619.mp3?xcode=dd0d0d0df7218eb9a79c7fd72cefb648&mid=0.18926789458694"); mediaPlayer = MediaPlayer.create(MediaPlayerDemoActivity.this, uri); mediaPlayer.start();
实现效果:
贴上源代码:
package com.jiahui.media; import java.io.IOException; public class MediaPlayerDemoActivity extends Activity implements OnClickListener { private Button btnAppStart, btnAssetsStart, btnSdcardStart, btnNetworkStart; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btnAppStart = (Button) this.findViewById(R.id.btnAppStart); btnAssetsStart = (Button) this.findViewById(R.id.btnAssetsStart); btnSdcardStart = (Button) this.findViewById(R.id.btnSdcardStart); btnNetworkStart = (Button) this.findViewById(R.id.btnNetworkStart); btnAppStart.setOnClickListener(this); btnAssetsStart.setOnClickListener(this); btnSdcardStart.setOnClickListener(this); btnNetworkStart.setOnClickListener(this); } @Override public void onClick(View v) { MediaPlayer mediaPlayer = null; switch (v.getId()) { case R.id.btnAppStart: System.out.println("---播放应用的资源文件----"); // 使用raw下的资源文件创建MediaPlayer对象 mediaPlayer = MediaPlayer.create(MediaPlayerDemoActivity.this, R.raw.a1); mediaPlayer.start(); break; case R.id.btnAssetsStart: System.out.println("---播放assest的资源文件----"); AssetManager assetManager = this.getAssets(); try { AssetFileDescriptor fileDescriptor = assetManager .openFd("a2.mp3"); mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(), fileDescriptor.getStartOffset(), fileDescriptor.getLength()); mediaPlayer.prepare(); mediaPlayer.start(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; case R.id.btnSdcardStart: System.out.println("---播放SDcard上的文件---"); try { mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource("/mnt/sdcard/a3.mp3"); mediaPlayer.prepare(); mediaPlayer.start(); } catch (Exception e) { } break; case R.id.btnNetworkStart: System.out.println("播放网络上的音频"); // http://zhangmenshiting2.baidu.com/data2/music/9138619/9138619.mp3? // xcode=dd0d0d0df7218eb9a79c7fd72cefb648&mid=0.18926789458694 try { // mediaPlayer = new MediaPlayer(); // 通过Uri解析一个网络地址 Uri uri = Uri .parse("http://zhangmenshiting2.baidu.com/data2/music/9138619/9138619.mp3?xcode=dd0d0d0df7218eb9a79c7fd72cefb648&mid=0.18926789458694"); mediaPlayer.setDataSource(MediaPlayerDemoActivity.this, uri); // mediaPlayer.prepare(); // 也可以直接通过这种方式装载网络上的音频文件 mediaPlayer = MediaPlayer.create(MediaPlayerDemoActivity.this, uri); mediaPlayer.start(); } catch (Exception e) { // TODO: handle exception } break; default: break; } } }
如需转载引用请注明出处:http://blog.csdn.net/jiahui524
源代码下载:http://download.csdn.net/detail/jiahui524/3847987
相关文章推荐
- 从头学Android之多媒体--使用MediaPlayer播放音频
- 从头学Android之多媒体--使用MediaPlayer播放音频
- 从头学Android之多媒体--使用MediaPlayer和SurfaceView播放视频
- 【Android开发】多媒体应用开发-使用MediaPlayer播放音频
- Android之多媒体--使用MediaPlayer播放音频
- 从头学Android之多媒体--使用SoundPool播放音频
- Android之多媒体使用——MediaPlayer播放音频
- 25、从头学Android之多媒体--使用SoundPool播放音频
- 从头学Android之多媒体--使用MediaPlayer和SurfaceView播放视频
- 28、从头学Android之多媒体--使用MediaPlayer和SurfaceView播放视频
- Android -- 视频音频多媒体播放,在线播放, MediaPlayer, SurfaceView, SoundPool, Timer定时器使用
- 4.10 从头学Android之多媒体--使用MediaPlayer和SurfaceView播放视频
- 从头学Android之多媒体--使用MediaPlayer和SurfaceView播放视频
- 对象方法Android之多媒体使用——MediaPlayer播放音频
- Android多媒体应用使用MediaPlayer播放音频
- Android -- 视频音频多媒体播放,在线播放, MediaPlayer, SurfaceView, SoundPool, Timer定时器使用
- 01.Android之多媒体--使用MediaPlayer播放音频02
- Android 使用MediaPlayer播放assets目录的音频文件
- Android多媒体应用使用SoundPool播放音频
- Android 多媒体应用——MediaPlayer音频播放