android MediaPlayer简易播放器

来源:互联网 发布:手机淘宝销量排名 编辑:程序博客网 时间:2024/05/21 22:33
package com.example.jared.mediaplayerstudy;import android.media.MediaPlayer;import android.os.Bundle;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.SeekBar;import android.widget.TextView;public class MainActivity extends AppCompatActivity {    private Button playMusic;    private Button pauseMusic;    private Button stopMusic;    private TextView totalTime_text;    private TextView playingTime_text;    private SeekBar playingProcess;    private int totalTime = 0;    private MediaPlayer mediaPlayer;    private Handler hangler = new Handler();    private boolean flag = true;    private Player player;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        playMusic = (Button) findViewById(R.id.play);//开始/暂停        pauseMusic = (Button) findViewById(R.id.pause);//暂停        playingProcess = (SeekBar) findViewById(R.id.seek);//进度条        totalTime_text = (TextView) findViewById(R.id.totalTime);//播放时间和总时长
        player = new Player(playingProcess, totalTime_text);  //初始化        playingProcess.setOnSeekBarChangeListener(new SeekBarChangeEvent());        new Thread(new Runnable() {            @Override            public void run() {                player.playUrl("http://abv.cn/music/光辉岁月.mp3");            }        }).start();
        playMusic.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (player.mediaPlayer.isPlaying()) {                    player.mediaPlayer.pause();                } else {                    player.mediaPlayer.start();                }            }        });        pauseMusic.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (player.mediaPlayer.isPlaying()) {                    player.mediaPlayer.pause();                }            }        });    }    class SeekBarChangeEvent implements SeekBar.OnSeekBarChangeListener {        int progress;        @Override        public void onProgressChanged(SeekBar seekBar, int progress,                                      boolean fromUser) {            // 原本是(progress/seekBar.getMax())*player.mediaPlayer.getDuration()            this.progress = progress * player.mediaPlayer.getDuration()                    / seekBar.getMax();        }        @Override        public void onStartTrackingTouch(SeekBar seekBar) {        }        @Override        public void onStopTrackingTouch(SeekBar seekBar) {            // seekTo()的参数是相对与影片时间的数字,而不是与seekBar.getMax()相对的数字            player.mediaPlayer.seekTo(progress);        }    }        @Override    public void onBackPressed() {//退出并且停止播放        super.onBackPressed();        player.stop();        this.finish();    }}
 
   
package com.example.jared.mediaplayerstudy;import android.media.AudioManager;import android.media.MediaPlayer;import android.media.MediaPlayer.OnBufferingUpdateListener;import android.media.MediaPlayer.OnCompletionListener;import android.media.MediaPlayer.OnPreparedListener;import android.os.Handler;import android.os.Message;import android.util.Log;import android.widget.SeekBar;import android.widget.TextView;import java.io.IOException;import java.util.Timer;import java.util.TimerTask;public class Player implements OnBufferingUpdateListener,        OnCompletionListener, OnPreparedListener{    public MediaPlayer mediaPlayer;    private SeekBar skbProgress;    private Timer mTimer=new Timer();    private TextView textView;    public Player(SeekBar skbProgress, TextView textView)    {        this.skbProgress=skbProgress;        this.textView = textView;        try {            mediaPlayer = new MediaPlayer();            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);            mediaPlayer.setOnBufferingUpdateListener(this);            mediaPlayer.setOnPreparedListener(this);        } catch (Exception e) {            Log.e("mediaPlayer", "error", e);        }        mTimer.schedule(mTimerTask, 0, 300);    }    /*******************************************************     * 通过定时器和Handler来更新进度条     ******************************************************/    TimerTask mTimerTask = new TimerTask() {        @Override        public void run() {            if(mediaPlayer==null)                return;            if (mediaPlayer.isPlaying() && skbProgress.isPressed() == false) {                handleProgress.sendEmptyMessage(0);            }        }    };    Handler handleProgress = new Handler() {        public void handleMessage(Message msg) {            int position = getCurrentPositionWhenPlaying();            int duration = 0;            if (mediaPlayer!=null) {                 duration = mediaPlayer.getDuration();            }            if (position != 0)            textView.setText(JCUtils.stringForTime(position)+"/"+JCUtils.stringForTime(duration));            if (duration > 0) {                long pos = skbProgress.getMax() * position / duration;                skbProgress.setProgress((int) pos);            }        };    };    public int getCurrentPositionWhenPlaying() {        int position = 0;            try {                if (mediaPlayer!=null)                position = mediaPlayer.getCurrentPosition();            } catch (IllegalStateException e) {                e.printStackTrace();                return position;            }        return position;    }    //*****************************************************    public void play()    {        mediaPlayer.start();    }    public void playUrl(String videoUrl)    {        try {            mediaPlayer.reset();            mediaPlayer.setDataSource(videoUrl);            mediaPlayer.prepare();//prepare之后自动播放            //mediaPlayer.start();        } catch (IllegalArgumentException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IllegalStateException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    public void pause()    {        mediaPlayer.pause();    }    public void stop()    {        if (mediaPlayer != null) {            if (mTimer!=null) {                mTimer.cancel();            }            if(mTimerTask!=null) {                mTimerTask.cancel();            }            mediaPlayer.stop();            mediaPlayer.release();            mediaPlayer = null;        }    }    @Override    /**     * 通过onPrepared播放     */    public void onPrepared(MediaPlayer arg0) {        arg0.start();        Log.e("mediaPlayer", "onPrepared");    }    @Override    public void onCompletion(MediaPlayer arg0) {        Log.e("mediaPlayer", "onCompletion");    }    @Override    public void onBufferingUpdate(MediaPlayer arg0, int bufferingProgress) {        skbProgress.setSecondaryProgress(bufferingProgress);        int currentProgress=skbProgress.getMax()*mediaPlayer.getCurrentPosition()/mediaPlayer.getDuration();        Log.e(currentProgress+"% play", bufferingProgress + "% buffer");    }}
    完整项目链接:http://download.csdn.net/detail/cst11041/9812308
                                             
0 0
原创粉丝点击