上代码

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之判断当前网络状态
  2. Android(安卓)判断当前线程是否是UI主线程
  3. android 小知道积累II
  4. ArcGIS for Android(安卓)Runtime100 基本操作(四)——GPS定位
  5. android 简单实用的Log打印类封装,助你快速定位问题
  6. Android(安卓)编程下判断当前设备是手机还是平板
  7. Android(安卓)下拉刷新控件SwipeRefreshLayout结合WebView使用
  8. Android之——判断当前应用程序是否是用户程序
  9. android 软键盘 InputMethodManager

随机推荐

  1. android加载大量图片内存溢出的三种解决
  2. android apk dex odex jar 等文件的 反编
  3. android 监听添加或者删除应用
  4. Android常用工具整理
  5. Android中实现物体在屏幕的移动
  6. 安卓开发ScrollView嵌套ListView只显示一
  7. android 中文api (62) ―― ViewSwitcher
  8. Android滚动显示数字动画
  9. android自学笔记《二》——开发环境的搭
  10. android(11)_文件操作读取模式