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定时器任务:
这种做法虽然多点,但是代码是最 好的,因为他把事件掉到handler里面来处理了,而不是在run中处理,在run中处理会发生各种想不到的事
启动异步任务的地方最好也是放在 onPrepare里面