音乐播放器完善

来源:互联网 发布:java方法重载作用 编辑:程序博客网 时间:2024/05/22 21:46

1:在onCreate()中创建mediaManage对象,在MyBinder中重写callPlay()等方法

@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();player = new MediaPlayer();}

public void callPlay() {// TODO Auto-generated method stubtry {System.out.println("play");player.reset();//在再次播放的时候回到原点player.setDataSource(Environment.getExternalStorageDirectory().getPath() + "/" + "wosiwosheng.mp3");player.prepare();player.start();//进度条updateSeekBar();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} }
2:进度条逻辑

进度条需要在播放的时候也就是callPlay()方法执行时实时改变,需要实时的数据,而数据的传递可以用 handler实现.

在Mybinder中创建方法,在接口中添加方法,使用Timer类实现实时更新,在task中接收发送数据,任务完成后关闭任务.

public void updateSeekBar() {final int duration = player.getDuration();final Timer timer = new Timer();final TimerTask task = new TimerTask() {@Overridepublic void run() {// TODO Auto-generated method stubint currentPosition = player.getCurrentPosition();Message msg = Message.obtain();Bundle data = new Bundle();data.putInt("duration", duration);data.putInt("currentPosition", currentPosition);msg.setData(data);MainActivity.handler.sendMessage(msg);}};timer.schedule(task , 100, 1000);player.setOnCompletionListener(new OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {// TODO Auto-generated method stubtimer.cancel();task.cancel();}});}

在主线程中更新进度条

public static Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);Bundle data = msg.getData();int duration = data.getInt("duration");int currentPosition = data.getInt("currentPosition");sb.setMax(duration);sb.setProgress(currentPosition);}};
3:拖动进度条

设置事件

sb = (SeekBar) findViewById(R.id.sb);sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {// TODO Auto-generated method stubiservice.callProgress(seekBar.getProgress());}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {// TODO Auto-generated method stub}@Overridepublic void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {// TODO Auto-generated method stub}});


@Overridepublic void callProgress(int progress) {// TODO Auto-generated method stubplayer.seekTo(progress);}



原创粉丝点击