上代码

public class Player implements OnBufferingUpdateListener, OnCompletionListener, OnPreparedListener {    public MediaPlayer mediaPlayer; // 媒体播放器    private SeekBar seekBar; // 拖动条    private Timer mTimer = new Timer(); // 计时器    // 初始化播放器    public Player(SeekBar seekBar) {        super();        this.seekBar = seekBar;        try {            mediaPlayer = new MediaPlayer();            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);// 设置媒体流类型            mediaPlayer.setOnBufferingUpdateListener(this);            mediaPlayer.setOnPreparedListener(this);        } catch (Exception e) {            e.printStackTrace();        }        // 每一秒触发一次        mTimer.schedule(timerTask, 0, 1000);    }    // 计时器    TimerTask timerTask = new TimerTask() {        @Override        public void run() {            if (mediaPlayer == null)                return;            if (mediaPlayer.isPlaying() && seekBar.isPressed() == false) {                handler.sendEmptyMessage(0); // 发送消息            }        }    };    Handler handler = new Handler() {        public void handleMessage(android.os.Message msg) {            int position = mediaPlayer.getCurrentPosition();            int duration = mediaPlayer.getDuration();            if (duration > 0) {                // 计算进度(获取进度条最大刻度*当前音乐播放位置 / 当前音乐时长)                long pos = seekBar.getMax() * position / duration;                seekBar.setProgress((int) pos);            }        };    };    public void play() {        mediaPlayer.start();    }    /** * * @param url * url地址 */    public void playUrl(String url) {        try {            mediaPlayer.reset();            mediaPlayer.setDataSource(url); // 设置数据源            mediaPlayer.prepare(); // prepare自动播放        } catch (IllegalArgumentException e) {            e.printStackTrace();        } catch (SecurityException e) {            e.printStackTrace();        } catch (IllegalStateException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }    // 暂停    public void pause() {        mediaPlayer.pause();    }    // 停止    public void stop() {        if (mediaPlayer != null) {            mediaPlayer.stop();            mediaPlayer.release();            mediaPlayer = null;        }    }    @Override    public void onPrepared(MediaPlayer mp) {        mp.start();        Log.e("mediaPlayer", "onPrepared");    }    @Override    public void onCompletion(MediaPlayer mp) {        Log.e("mediaPlayer", "onCompletion");    }    /** * 缓冲更新 */    @Override    public void onBufferingUpdate(MediaPlayer mp, int percent) {        seekBar.setSecondaryProgress(percent);        int currentProgress = seekBar.getMax()                * mediaPlayer.getCurrentPosition() / mediaPlayer.getDuration();        Log.e(currentProgress + "% play", percent + " buffer");    }}

更多相关文章

  1. Android之计时器(Chronometer)的用法
  2. 浅入浅出Android(012):Android下的计时器
  3. Chronometer android计时器组件Chronometer的使用,android通话时
  4. Android中实现计时器的功能
  5. android 计时器线程
  6. Android计时器TimerTask,Timer,Handler
  7. Android 计时器Timer用法
  8. 五大媒体播放器的Android
  9. Android我自己的简易(秒表)计时器Chronometer

随机推荐

  1. Real Android(安卓)apps leveraging db4o
  2. Android(安卓)NDK编译libPng为静态库
  3. android几种开源项目源码地址
  4. Android(安卓)布局之RelativeLayout
  5. android View的快照与屏幕的截屏
  6. Android(安卓)Fire Project(1)Recall Env
  7. Android(安卓)Screen Monitor抓取真机屏
  8. Android(安卓)P图形架构之三屏异显实现
  9. 新说android launch mode
  10. Android单元测试