简易的音乐播放



import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnPreparedListener;


import android.view.View;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;


public class MainActivity extends Activity implements OnPreparedListener, OnCompletionListener, OnSeekBarChangeListener {
File file;
private Handler mhandler;
private SeekBar seekbar;
private TextView tv1;
private TextView tv2;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

file=new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC),"李涛 - 活埋.mp3");
tv1=(TextView) findViewById(R.id.textView1);
tv2=(TextView) findViewById(R.id.textView2);
seekbar=(SeekBar) findViewById(R.id.seekBar1);

mhandler=new MainHandler();
seekbar.setOnSeekBarChangeListener(this);
}
enum States{STOP,PAUSE}
States state=States.STOP;
private MediaPlayer mplayer;
private SeekBarThread barThread;

public void onClick01(View v){
if(mplayer==null){
mplayer=new MediaPlayer();
mplayer.setOnPreparedListener(this);
mplayer.setOnCompletionListener(this);
}if(state==States.PAUSE){
mplayer.start();
return;
}
try{
//得到文件目录
mplayer.setDataSource(file.getPath());
//播放音乐
mplayer.prepareAsync();

}catch(Exception e){e.printStackTrace();}
//更新seekbar
if(barThread==null){
barThread=new SeekBarThread();
barThread.start();}

}
private boolean isUpdate=true;
//给主线程发消息,更新seekbar。  
class SeekBarThread extends Thread{
@Override
public void run() {
while(isUpdate){
try {
sleep(1000);
} catch (InterruptedException e) {}
mhandler.sendEmptyMessage(1);
}
}
}
private SimpleDateFormat sdf=new SimpleDateFormat("mm:ss");
class MainHandler extends Handler{ 
public MainHandler(){}
public MainHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
if(msg.what==1&&mplayer!=null){
int cp=mplayer.getCurrentPosition();
tv1.setText(sdf.format(new Date(cp)));
seekbar.setProgress(cp);}
}
}
public void onClick02(View v){
if(mplayer!=null&&mplayer.isPlaying()){
mplayer.pause();
state=States.PAUSE;
}
}

@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
seekbar.setMax(mplayer.getDuration());
tv2.setText(sdf.format(new Date(mplayer.getDuration())));

}
@Override
protected void onDestroy() {
super.onDestroy();
isUpdate=false;
if(mplayer!=null){
mplayer.release();
mplayer=null;
}
}


@Override
public void onCompletion(MediaPlayer mp) {
Log.i("TAG", "重播");
mp.start();


}


@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// TODO Auto-generated method stub

}


@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub

}


@Override
public void onStopTrackingTouch(SeekBar seekBar) {
int cp=seekBar.getProgress();
if(mplayer!=null){
mplayer.seekTo(cp);
mplayer.start();
 
}
}



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值