24、从头学Android之多媒体--使用MediaPlayer播放音频
来源:互联网 发布:文件夹批量重命名软件 编辑:程序博客网 时间:2024/05/18 00:05
静态构造方法
方法名称
描述
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 implementsOnClickListener {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);}@Overridepublic 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 blocke.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.18926789458694try {// 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
- 24、从头学Android之多媒体--使用MediaPlayer播放音频
- 24、从头学Android之多媒体--使用MediaPlayer播放音频
- 从头学Android之多媒体--使用MediaPlayer播放音频
- 25、从头学Android之多媒体--使用SoundPool播放音频
- 25、从头学Android之多媒体--使用SoundPool播放音频
- Android之多媒体--使用MediaPlayer播放音频
- 28、从头学Android之多媒体--使用MediaPlayer和SurfaceView播放视频
- 28、从头学Android之多媒体--使用MediaPlayer和SurfaceView播放视频
- 从头学Android之多媒体--使用MediaPlayer和SurfaceView播放视频
- 4.10 从头学Android之多媒体--使用MediaPlayer和SurfaceView播放视频
- Android之多媒体使用——MediaPlayer播放音频
- 01.Android之多媒体--使用MediaPlayer播放音频01
- 01.Android之多媒体--使用MediaPlayer播放音频02
- 26、从头学Android之多媒体--使用MediaRecorder录制音频
- 从头学Android之多媒体--使用MediaRecorder录制音频
- 26、从头学Android之多媒体--使用MediaRecorder录制音频
- 27、从头学Android之多媒体--使用VideoView播放视频
- 27、从头学Android之多媒体--使用VideoView播放视频
- 手机制作与开发模块学习方法总结
- C#如何获取鼠标相对当前窗口的坐标
- 430学习建议
- 如何带新员工(测试篇)
- 计算DataGridView列的和
- 24、从头学Android之多媒体--使用MediaPlayer播放音频
- 关于MS2K一些存储过程的总结
- 寒江独钓之Windows内核安全编程随想
- 软件开发中的经验主义和理性主义
- 用命令行导出和导入MySQL数据库
- win8出现“wermgr.exe - Application Error”错误的解决方法
- 查询字段中最小值
- Dataset和SqlDataRead读取数据库性能分析
- Backtrack5 Linux安装RTL8192CE SE无线网卡驱动