Android之多媒体(Media)(一)

种子牢记着雨滴献身的叮嘱,增强了冒尖的勇气。


本讲内容:Android中的音频和视频使用

Android 提供了 MediaPlayer 和 MediaRecorder 两个工具类,来帮助开发者操作音频和视频。

本讲我们讲解 MediaPlayer类的使用


一、MediaPlayer类的静态构造方法

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对象

二、MediaPlayer类常用方法

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对象的资源。

三、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.create(MediaPlayerDemoActivity.this, R.raw.a); 

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("a.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/a.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();  


示例一:播放音频各种方式


下面是主文件:

public class MainActivity extends Activity implements OnClickListener {
	private Button b1;
	private Button b2;
	private Button b3;
	private Button b4;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		b1=(Button) findViewById(R.id.b1);
		b2=(Button) findViewById(R.id.b2);
		b3=(Button) findViewById(R.id.b3);
		b4=(Button) findViewById(R.id.b4);
		b1.setOnClickListener(this);
		b2.setOnClickListener(this);
		b3.setOnClickListener(this);
		b4.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		MediaPlayer mediaPlayer=null;
		switch (v.getId()) {
		case R.id.b1:
			mediaPlayer=MediaPlayer.create(MainActivity.this, R.raw.apple);
			mediaPlayer.start();
			break;
		case R.id.b2:
			AssetManager assetManager=this.getAssets();
			try {
				AssetFileDescriptor fileDescriptor=assetManager.openFd("apple.mp3");
				mediaPlayer = new MediaPlayer();
				mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),fileDescriptor.
						getStartOffset(),fileDescriptor.getLength()); 
				mediaPlayer.prepare();  
                mediaPlayer.start();
			} catch (IOException e) {
				e.printStackTrace();
			}
			break;
		case R.id.b3:
			try {
				mediaPlayer = new MediaPlayer();  
                mediaPlayer.setDataSource("/mnt/sdcard/apple.mp3");  
                mediaPlayer.prepare();  
                mediaPlayer.start(); 
			} catch (Exception e) {}
			break;
		case R.id.b4:
			try {
				Uri uri = Uri.parse("http://zhangmenshiting2.baidu.com/data2/music/9138619/"
						+ "9138619.mp3?xcode=dd0d0d0df7218eb9a79c7fd72cefb648&mid=0.18926789458694");  
			    mediaPlayer.setDataSource(MainActivity.this, uri);
			    mediaPlayer = MediaPlayer.create(MainActivity.this,uri);  
                mediaPlayer.start();
			} catch (Exception e) {}
			break;
		}
	}
}


Take your time and enjoy it

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值