南平市盟贝特志成网络技术有限公司
首页 | 联系方式 | 加入收藏 | 设为首页 | 手机站

产品目录

联系方式

联系人:业务部
电话: 00154-861715
邮箱:service@wyl19910906.com

当前位置:首页 >> 产品展示 >> 默认分类 >> 正文

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;
 }
}

}