实习入职第九天: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.       
  15.     Handler handleProgress = new Handler() {  
  16.         public void handleMessage(Message msg) {  
  17.   
  18.             int position = mediaPlayer.getCurrentPosition();  
  19.             int duration = mediaPlayer.getDuration();  
  20.               
  21.             if (duration > 0) {  
  22.                 long pos = skbProgress.getMax() * position / duration;  
  23.                 skbProgress.setProgress((int) pos);  
  24.             }  
  25.         };  
  26.     };  
  27.     //*****************************************************
这种做法虽然多点,但是代码是最  好的,因为他把事件掉到handler里面来处理了,而不是在run中处理,在run中处理会发生各种想不到的事


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

你可能感兴趣的:(实习)