package com.example.media_demo;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
public class MainActivity extends Activity {
private MediaPlayer mediaPlayer;
private SeekBar seekBar;
private int duration;
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
int progress=(Integer) msg.obj;
//设置seekBarUI
seekBar.setProgress(progress);
};
};
private Timer timer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
seekBar = (SeekBar) findViewById(R.id.seekBar);
timer = new Timer();
// 在res 文件夹 下边创建raw 放音乐文件
// create MediaPlayer mp = new MediaPlayer();
// mp.prepare();
// mediaPlayer = MediaPlayer.create(this, R.raw.myhome);
mediaPlayer = new MediaPlayer();
try {
// mediaPlayer.setDataSource("mnt/sdcard/myhome.mp3");
mediaPlayer.setDataSource(this, Uri.parse("mnt/sdcard/myhome.mp3"));
} catch (Exception e) {
e.printStackTrace();
}
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
if(mediaPlayer!=null){
//progress 当前拖动的进度 max=100; (progress* duration/max)
int currentDuration=(progress*duration/100);
//偏移至某一位置
mediaPlayer.seekTo(currentDuration);
}
}
});
}
public void play(View v) {
try {
mediaPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
}
mediaPlayer.start();
//获取音乐文件总长度
duration = mediaPlayer.getDuration();
TimerTask task = new TimerTask() {
@Override
public void run() {
if(mediaPlayer!=null){
// 子线程
//获取音乐文件当前播放的长度位置
int currentPosition = mediaPlayer.getCurrentPosition();
// duration 100 当前2
int progress = (currentPosition * 100 / duration);
// 更新UI handler 将当前位置 和progress发给主线程.
Message message=Message.obtain();
message.obj=progress;
//发给主线程更新UI
handler.sendMessage(message);
}
}
};
// 每隔一秒钟更新seekBar UI
timer.schedule(task, 0, 1000);
}
public void pause(View v) {
// 不为空 正在播放
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.pause();
}
}
public void stop(View v) {
if (mediaPlayer != null) {
mediaPlayer.stop();
timer.cancel();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaPlayer != null) {
// 释放资源
mediaPlayer.release();
// 置为空
mediaPlayer = null;
//取消timer 任务
timer.cancel();
}
}
}
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
public class MainActivity extends Activity {
private MediaPlayer mediaPlayer;
private SeekBar seekBar;
private int duration;
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
int progress=(Integer) msg.obj;
//设置seekBarUI
seekBar.setProgress(progress);
};
};
private Timer timer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
seekBar = (SeekBar) findViewById(R.id.seekBar);
timer = new Timer();
// 在res 文件夹 下边创建raw 放音乐文件
// create MediaPlayer mp = new MediaPlayer();
// mp.prepare();
// mediaPlayer = MediaPlayer.create(this, R.raw.myhome);
mediaPlayer = new MediaPlayer();
try {
// mediaPlayer.setDataSource("mnt/sdcard/myhome.mp3");
mediaPlayer.setDataSource(this, Uri.parse("mnt/sdcard/myhome.mp3"));
} catch (Exception e) {
e.printStackTrace();
}
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
if(mediaPlayer!=null){
//progress 当前拖动的进度 max=100; (progress* duration/max)
int currentDuration=(progress*duration/100);
//偏移至某一位置
mediaPlayer.seekTo(currentDuration);
}
}
});
}
public void play(View v) {
try {
mediaPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
}
mediaPlayer.start();
//获取音乐文件总长度
duration = mediaPlayer.getDuration();
TimerTask task = new TimerTask() {
@Override
public void run() {
if(mediaPlayer!=null){
// 子线程
//获取音乐文件当前播放的长度位置
int currentPosition = mediaPlayer.getCurrentPosition();
// duration 100 当前2
int progress = (currentPosition * 100 / duration);
// 更新UI handler 将当前位置 和progress发给主线程.
Message message=Message.obtain();
message.obj=progress;
//发给主线程更新UI
handler.sendMessage(message);
}
}
};
// 每隔一秒钟更新seekBar UI
timer.schedule(task, 0, 1000);
}
public void pause(View v) {
// 不为空 正在播放
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.pause();
}
}
public void stop(View v) {
if (mediaPlayer != null) {
mediaPlayer.stop();
timer.cancel();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaPlayer != null) {
// 释放资源
mediaPlayer.release();
// 置为空
mediaPlayer = null;
//取消timer 任务
timer.cancel();
}
}
}