实习入职第九天:MediaPlayer添加进度条的两种方式

1.使用handler做:

	Handler handler = new Handler();
	Runnable updateThread = new Runnable() {
		public void run() {
			// 获得歌曲现在播放位置并设置成播放进度条的值
			if (mediaPlayer != null) {
				sb.setProgress(mediaPlayer.getCurrentPosition());
				// 每次延迟100毫秒再启动线程
				handler.postDelayed(updateThread, 100);
			}
		}
	};

然后在onPrepare()里面post出去,在程序退出的时候销毁handler.removeCallback(runnable)

2.利用mediaPlayer.setOnBufferingUpdateListener方法做

也是在onPrepare里面添加下面的代码即可,把我注视的地方都去掉就可以显示了,

mediaPlayer.setOnBufferingUpdateListener(new OnBufferingUpdateListener() { // int currentPosition, duration; @Override public void onBufferingUpdate(MediaPlayer mp, int percent) { // currentPosition = mediaPlayer.getCurrentPosition(); // duration = mediaPlayer.getDuration(); // int time = ((currentPosition * 100) / duration); // mProgressBar.setProgress(time); mProgressBar.setSecondaryProgress(percent); } });

3.利用timer定时器任务:

  1. /*******************************************************
  2.      * 通过定时器和Handler来更新进度条
  3.      ******************************************************/
  4.     TimerTask mTimerTask = new TimerTask() {  
  5. @Override
  6. public void run() {  
  7. if(mediaPlayer==null)  
  8. return;  
  9. if (mediaPlayer.isPlaying() && skbProgress.isPressed() == false) {  
  10.                 handleProgress.sendEmptyMessage(0);  
  11.             }  
  12.         }  
  13.     };  
  14.     Handler handleProgress = new Handler() {  
  15. public void handleMessage(Message msg) {  
  16. int position = mediaPlayer.getCurrentPosition();  
  17. int duration = mediaPlayer.getDuration();  
  18. if (duration > 0) {  
  19. long pos = skbProgress.getMax() * position / duration;  
  20. skbProgress.setProgress((int) pos);  
  21.             }  
  22.         };  
  23.     };  
  24. //*****************************************************

这种做法虽然多点,但是代码是最  好的,因为他把事件掉到handler里面来处理了,而不是在run中处理,在run中处理会发生各种想不到的事

启动异步任务的地方最好也是放在  onPrepare里面

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券