您的位置:首页 > 移动开发 > Android开发

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

2016-06-01 23:31 537 查看

播放器常用功能的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;
}
}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Mediaplaye Seekbar Handler