package com.media;
import java.io.IOException;
import android.app.Activity;
import android.app.AlertDialog;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.SeekBar.OnSeekBarChangeListener;
public class AudioActivity extends Activity implements OnCompletionListener{
private ImageButton play,pause,stop;
private MediaPlayer mp;
TextView textView;
SeekBar seekbar;
private Handler mHandler;
private Runnable update = new Runnable() {
public void run() {
int position = mp.getCurrentPosition();
int mMax = mp.getDuration();
int sMax = seekbar.getMax();
int time=position*sMax/mMax;
// System.out.println("update position="+position);
// System.out.println("update mMax="+mMax);
// System.out.println("update sMax="+sMax);
// System.out.println("update time="+time);
textView.setText(time+"%");
seekbar.setProgress(time);
seekbar.postInvalidate();
mHandler.postDelayed(update, 1000);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.audio);
mHandler = new Handler();
mHandler.post(update);
textView = (TextView)findViewById(R.id.audio_textview);
play = (ImageButton)findViewById(R.id.play);
pause = (ImageButton)findViewById(R.id.pause);
stop = (ImageButton)findViewById(R.id.stop);
seekbar=(SeekBar)findViewById(R.id.seekb);
play.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
play();
}
});
pause.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
pause();
}
});
stop.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
stop();
}
});
seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
int dest = seekBar.getProgress(); //获得SeekBar拖动后的数值
int mMax = mp.getDuration(); //获得整个音频的播放周期(时间)
int sMax = seekbar.getMax();//获得SeekBar的最大值
int position=mMax*dest/sMax;//计算音频的播放位置 dest/sMax是百分比
System.out.println("dest="+dest);
System.out.println("mMax="+mMax);
System.out.println("sMax="+sMax);
System.out.println("position="+position);
mp.seekTo(position);
}
});
setup();
}
@Override
public void onDestroy() {
super.onDestroy();
if (stop.isEnabled()) {
stop();
}
}
private void play() {
mp.start();
play.setEnabled(false);
pause.setEnabled(true);
stop.setEnabled(true);
}
private void stop() {
mp.stop();
pause.setEnabled(false);
stop.setEnabled(false);
try {
mp.prepare();
mp.seekTo(0);
play.setEnabled(true);
}
catch (Throwable t) {
error(t);
}
}
private void pause() {
mp.pause();
play.setEnabled(true);
pause.setEnabled(false);
stop.setEnabled(true);
}
private void loadClip() {
try {
// mp=MediaPlayer.create(this, R.raw.when_you_believe);
mp=new MediaPlayer();
mp.setOnCompletionListener(this);
mp.setDataSource("/sdcard/test.mp3");
mp.prepare();
}
catch (Throwable t) {
error(t);
}
}
private void setup() {
loadClip();
play.setEnabled(true);
pause.setEnabled(false);
stop.setEnabled(false);
}
private void error(Throwable t) {
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder
.setTitle("报错啦!")
.setMessage(t.toString())
.setPositiveButton("确定", null)
.show();
}
@Override
public void onCompletion(MediaPlayer mp1) {
Log.d("mediaplayer","onCompletion");
// mp.seekTo(0);
mp.start();
play.setEnabled(true);
pause.setEnabled(false);
stop.setEnabled(false);
}
}