简单实现音乐播放器

package com.example.music;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

import java.io.IOException;

/**	思维模式
 * 1--找布局,找控件
 * 2-- 给控件设置点击事件儿(上一首,播放,下一首)
 * 3--实现播放方法,(上下点击事件儿都会调用播放方法)
 * 4--让seekBar自动前进(),用handler,
 * 5--控制seekBar手动拖动逻辑
 * 6-- 暂停的逻辑
 * 7-- handler一直发送消息的逻辑;
 */
public class MainActivity extends Activity implements View.OnClickListener {

    /**
     * getExternalStorageDirectory:获取sd卡目录
     * getAbsolutePath:获取绝对路径
     */
    String path = Environment.getExternalStorageDirectory().getAbsolutePath();
    //创建一个数组来存放音乐
    String[] music_array = new String[]{path + "/aa.mp3", path + "/bb.mp3", path + "/cc.mp3"};
    private SeekBar seek;
    private MediaPlayer player;
    private int index = 0;  
    //音乐在数组中的下标;
    private boolean isPlaying = false;

    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            //进度条刷新间隔时间
            handler.sendEmptyMessageDelayed(1, 1000);
            int currentPosition = player.getCurrentPosition();
          //更新进度;
            seek.setProgress(currentPosition);
            if (currentPosition >= player.getDuration()) {
                //取消掉所有消息
                handler.removeCallbacksAndMessages(null);
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //寻找控件的内部类
        initViews();
        player = new MediaPlayer();
        //seekbar的监听
        seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

            }
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                //获取手放开时候的拖动进度
                int progress = seekBar.getProgress();
                player.seekTo(progress);
            }
        });
    }
    private void initViews() {
    	//获取控件
        seek = (SeekBar) findViewById(R.id.progress);
        Button pre = (Button) findViewById(R.id.pre);
        Button start = (Button) findViewById(R.id.start);
        Button next = (Button) findViewById(R.id.next);
        // 注册监听;
        pre.setOnClickListener(this);  
        start.setOnClickListener(this);
        next.setOnClickListener(this);

    }

    /**
     * 按钮的点击事件;
     *
     * @param v
     */
    @Override
    public void onClick(View v) {
    	
        switch (v.getId()) {
            case R.id.pre:
                pre();
                break;
            case R.id.start:
                start();
                break;
            case R.id.next:
                next();
                break;
        }
    }
    private void start() {

        if (isPlaying) {
            player.pause();
            isPlaying = false;
            return;
        }
        try {
            player.reset(); //重置
            player.setDataSource(music_array[index]);   //设置路径
            player.prepare();   //准备
            int duration = player.getDuration();    //得到音乐总时长;
            seek.setMax(duration);      //把总时长设置给seekBar
            player.start();     //播放
            handler.sendEmptyMessageDelayed(1,1000);
            isPlaying = true;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 上一首
     */
    private void pre() {
        if (index <=  0) {
            Toast.makeText(this, "已经是第一首了", Toast.LENGTH_SHORT).show();
        }else {
           index--;
           start();
        }

    }

    /**
     * 下一首
     */
    private void next() {

        if (index >= music_array.length-1) {
            Toast.makeText(this, "已经是最后一首了", Toast.LENGTH_SHORT).show();
        }else {
            index++;
            start();
        }

    }
}

猜你喜欢

转载自blog.csdn.net/wangshuo_/article/details/84073670