MediaPlayer播放音乐

1.音乐的播放,暂停,上一曲,下一曲


public class MainActivity extends Activity {

	private SeekBar sk;
	private TextView tv;
	private MediaPlayer mediaPlayer;
	private int[] musics;
	int h=0;
	int i = 5;
	private Timer timer;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		sk = (SeekBar) findViewById(R.id.sk);
		tv = (TextView) findViewById(R.id.tv);
		musics = new int[] { R.raw.q, R.raw.r, R.raw.s, R.raw.t, R.raw.w,
				R.raw.y };
		sk.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

			@Override
			// seekbar停止拖动
			public void onStopTrackingTouch(SeekBar seekBar) {
				//当没有歌曲播放的时候,拖动拖动条,不能执行
				if (mediaPlayer != null) {

					// 当用户停止拖动的时,得到seekbar的进度,然后给歌曲设置进度
					int progress = sk.getProgress();
					// 设置歌曲的当前进度
					mediaPlayer.seekTo(progress);

					// 开启进度条自动获取进度显示
					setSeekbar();
				} else {
					sk.setProgress(0);
				}
			}

			@Override
			// seekbar开始拖动
			public void onStartTrackingTouch(SeekBar seekBar) {

				// 当用户手动拖动进度条时,seekbar的进度要停止。
				//timet计时器停止,进度条就不会获得进度。不会来回跳跃
				Cancletimer();

			}

			@Override
			// seekbar进度改变。正在拖动
			public void onProgressChanged(SeekBar seekBar, int progress,
					boolean fromUser) {
			// 当拖动的时候,显示的时间随时在改变
				// formatData(progress);
				// 从当前进度获取到当前seekbar走的时间
				formatData(progress);

			}
		});
	}

	// 开始
	public void start(View v) {
		startmusic(i);

	}

	// 暂停
	public void pause(View v) {
		pausemusic();
	}

	// 停止
	public void stop(View v) {
		stopmusic();
	}

	// 上一首
	public void up(View v) {
		stop(v);
		--i;
		if(i==-1){
			i=5;
		}
		startmusic(i);
		
		
	}

	// 下一首
	public void next(View v) {
		//此处必须用stop(v)来控制控件的开关,才能使整个视图生效。
		stop(v);
		++i;
		if(i==6){
			i=0;
		}
		startmusic(i);
	}

	// 开始播放
	private void startmusic(int i) {
		if (mediaPlayer == null) {
			mediaPlayer = MediaPlayer.create(MainActivity.this, musics[i]);
			mediaPlayer.start();
		}
		mediaPlayer.start();
		// 设置进度条
		setSeekbar();
		//歌曲播放完之后自动播放
		mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
			
			@Override
			public void onCompletion(MediaPlayer mp) {
				next(null);				
			}
		});
	}

	// 暂停播放
	private void pausemusic() {
		if (mediaPlayer != null && mediaPlayer.isPlaying()) {
			mediaPlayer.pause();
		}
	}

	// 停止播放
	private void stopmusic() {
		//判断当歌曲没有播放时,mediaplayer为空,不能直接点击停止
		if (mediaPlayer != null) {

			mediaPlayer.stop();
			mediaPlayer.release();
			mediaPlayer = null;
//			Cancletimer();

	}
	}

	// 进度条的播放显示
	private void setSeekbar() {
		

			// 获取歌曲播放的长度
			int duration = mediaPlayer.getDuration();
			// 给seekbar设置最大值
			sk.setMax(duration);
			timer = new Timer();
			timer.schedule(new TimerTask() {

				public void run() {
					//当点击停止时,mediaplayer为空,会出现空指针
					if (mediaPlayer != null) {
					// 得到当前进度歌曲
					int currentPosition = mediaPlayer.getCurrentPosition();

					// 设置进度条
					sk.setProgress(currentPosition);
					}else {
						//设置初始停止时,进度条返回初始状态。
						sk.setProgress(0);
						
					}
				}
			}, 0, 500);
		} 


	private void Cancletimer() {
		
		//当没有点击开始时,
		if (timer != null) {
			timer.cancel();
		}
	}

	// 格式化毫秒值。设置显示的值
	public void formatData(long ss) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("mm:ss");
		Date date = new Date(ss);
		String format = dateFormat.format(date);
		// format就是格式化好的时间
		//
		// runOnUiThread(new Runnable() {
		//
		// @Override
		// public void run() {
		tv.setText(format);
		// }
		// });

	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值