Android开发笔记之SeekBar 时间的显示 快进快退 Mediaplayer

播放器常用功能的demo

时间的显示 快进 后退 拖动等等

package com.example.mediaplayer_retry;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener{

MediaPlayer mMediaPlayer;
Button mPlayButton, mPauseButton, mStopButton, mForWard, mBackWard;
SeekBar mSeekBar;
TextView mTextView_one,mTextView_two;
Handler mHandler = new Handler(){
    public void handleMessage(android.os.Message msg) {
        int currentPosition = mMediaPlayer.getCurrentPosition();
        mSeekBar.setProgress(currentPosition);
        String time = formatTime(currentPosition);
        mTextView_one.setText(time);
        mHandler.sendEmptyMessageDelayed(0, 1000);
    };
};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();
    setPlayListener();
    setPause();
    setStopListener();
    setSeekBarListener();
}

/********************************************************
 * 初始化控件
 */
private void initView() {
    mPlayButton = (Button) findViewById(R.id.media_play);
    mPauseButton = (Button) findViewById(R.id.media_pause);
    mStopButton = (Button) findViewById(R.id.media_stop);
    mForWard = (Button) findViewById(R.id.media_forward);
    mBackWard = (Button) findViewById(R.id.media_backwrad);
    mSeekBar = (SeekBar) findViewById(R.id.main_seekbar);
    mTextView_one = (TextView) findViewById(R.id.main_textview_time_one);
    mTextView_two = (TextView) findViewById(R.id.main_textview_time_two);
    mForWard.setOnClickListener(this);
    mBackWard.setOnClickListener(this);
}

/*******************************************************
 * 必须在方法中初始化mMediaPlayer对象
 * 播放音乐的初始化动作 setDataSource(path)设置音频的路径就是mp3的路径
 * mMediaPlayer.prepare()此方法就是装载音频文件
 * mMediaPlayer.start();此方法必须在上面的方法执行完毕后才可以
 * @param path 传入音频文件的路径参数
 */
public void play(String path) {
    if (mMediaPlayer == null) {
        try {
            mMediaPlayer = new MediaPlayer();
            mMediaPlayer.setDataSource(path);
            mMediaPlayer.prepare();
            mMediaPlayer.start();
            int position = mMediaPlayer.getDuration();
            mTextView_two.setText(formatTime(position));
            mSeekBar.setMax(position);
            mHandler.sendEmptyMessageDelayed(0, 1000);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }else if(mMediaPlayer != null && !mMediaPlayer.isPlaying()){
        mMediaPlayer.start();
    }
}

/**********************************************************
 * 设置播放按钮的点击事件 同时执行播放音乐方法 此点击事件采用的是匿名内部类的方式实现的
 */
public void setPlayListener() {
    mPlayButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            play("/sdcard/hello.mp3");
        }
    });
}

/*********************************************************
 * 暂停当前播放的音乐
 */
@SuppressLint("SdCardPath")
public void setPause() {
    if (mMediaPlayer != null && mMediaPlayer.isPlaying()) {
        mMediaPlayer.pause();
    }
}

/*************************************************
 * 设置点击暂停按钮的点击事件 同时执行mMediaPlayer的暂停pause方法
 * 此点击事件的方式是采用xml属性中设置onclick这个属性的方法
 */
public void pause(View v) {
    setPause();
}
/************************************************
 * 停止播放音乐的方法
 * 同时我们要释放内存,节约内存
 * 把mMediaPlayer赋值为空,返回到开始播放的状态
 */
public void stop(){
    if(mMediaPlayer != null){
        mMediaPlayer.stop();
        mMediaPlayer.release();
        mMediaPlayer = null;
    }
}
/*************************************************
 * 设置停止按钮的监听事件
 * 此按钮的监听事件采用第三种方式
 */
public void setStopListener(){
    mStopButton.setOnClickListener(listener);
}
OnClickListener listener = new OnClickListener() {
    @Override
    public void onClick(View v) {
        stop();
    }
};
/***************************************************
 * 设置快进10秒方法
 */
public void forWard(){
    if(mMediaPlayer != null){
        int position = mMediaPlayer.getCurrentPosition();
        mMediaPlayer.seekTo(position + 10000);
    }
}
/*****************************************************
 * 设置后退10秒的方法
 */
public void backWard(){
    if(mMediaPlayer != null){
        int position = mMediaPlayer.getCurrentPosition();
        if(position > 10000){
            position-=10000;
        }else{
            position = 0;
        }
        mMediaPlayer.seekTo(position);
    }
}
/********************************************************
 * 设置seekbar的拖动监听事件
 */
public void setSeekBarListener(){
    mSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
        public void onStopTrackingTouch(SeekBar seekBar) {

        }

        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            // TODO Auto-generated method stub
            if(mMediaPlayer != null && fromUser){
                mMediaPlayer.seekTo(progress);
            }
        }
    });
}
/*******************************************************
 * 关闭当前页面,停止播放
 */
protected void onDestroy() {
    super.onDestroy();
    stop();
}
/********************************************************
 * 设置快进和后退按钮的监听事件
 * @param v
 */
@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.media_forward:
        forWard();
        break;
    case R.id.media_backwrad:
        backWard();
        break;
    default:
        break;
    }
}
/********************************************************
 * 对时间的格式化
 * @param time
 * @return
 */
public static String formatTime(int time){
    if(time/1000%60 <10){
        return time/1000/60 + ":0" + time/1000%60;
    }else{
        return time/1000/60 + ":" + time/1000%60;
    }
}

}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值