Android仿虾米音乐播放器之MediaPlayer使用

     MediaPlayer是Android中用来播放媒体文件的一个类,我们用其来播放音乐文件,先介绍用法。

   首先MediaPlayer需要实例化对象,我们在onStratCommand中进行实例化。

private MediaPlayer player;

// api2.0以后采用onStartCommand
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		Log.i("music service", "onstartcommand");
		player = new MediaPlayer();
		mp3Infos = intent.getParcelableArrayListExtra("mp3Infos");
		return super.onStartCommand(intent, flags, startId);
	}

音乐总有开始播放,和播放完毕的时候,我们需要继承两个接口OnPreparedListener,OnCompletionListener,并且实现接口的回调方法。

/**
	 * 音乐准备完成的回调函数
	 */
	@Override
	public void onPrepared(MediaPlayer arg0) {
		Log.i("music service", "onprepare");
		player.start();
	}

/**
	 * 音乐播放完成的回调函数
	 */
	@Override
	public void onCompletion(MediaPlayer arg0) {
		Log.i("music service", "oncompletion");
		if ((Myapp.state % 3) == 2) {
			prepareMusic(position);
		} else {
			Intent intent = new Intent();
			intent.setAction(Constants.ACTION_NEXT);
			sendBroadcast(intent);
		}

	}

其中的prepareMusic是将播放音乐的过程抽象出来的方法

<span style="font-size:14px;">/*
	 * 准备播放音乐并添加播放与完结的事件监听
	 */
	private void prepareMusic(int position) {
		player.reset();
		player.setAudioStreamType(AudioManager.STREAM_MUSIC); // 设置播放类型
		String url = mp3Infos.get(position).getUrl();
		try {
			player.setDataSource(url);
		} catch (Exception e) {
			e.printStackTrace();
		}
		player.setOnPreparedListener(this);
		player.setOnCompletionListener(this);
		player.prepareAsync(); // prepare是阻塞的 prepareAsync是异步的
	}</span>

当然音乐也需要暂停功能

public void pauseMusic() {
		Log.i("pause", "pause");
		player.pause();
		current = player.getCurrentPosition();
	}
这里的current是返回的暂停时的milliseconds,可以看源码了解

当继续播放的时候,我们设置当前播放进度为current,然后start就可以了

	player.seekTo(current);
	player.start();



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值