您的位置:首页 > 移动开发 > Android开发

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

2015-07-16 20:49 513 查看
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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: