media播放音乐

package com.example.day17_medaiplayer;


public class MainActivity extends Activity implements OnClickListener,
        OnSeekBarChangeListener {
    // get External Storage Directory() 获取sdcard的目录
    // getAbsolutePath 获取文件路径
    private String path = Environment.getExternalStorageDirectory()
            .getAbsolutePath();
    private String[] music_names = new String[] { path + "/music1.mp3",
            path + "/music2.mp3", path + "/music3.mp3" };
    private TextView tilte;
    private SeekBar seek;
    private MediaPlayer player;
    private int index = 0;// 数组下标
    private MyHandler myHandler = new MyHandler();
    private boolean isPlaying = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //
        initViews();
        player = new MediaPlayer();
    }

    private void initViews() {
        tilte = (TextView) findViewById(R.id.name);
        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);
        // 拖动进度,音乐在拖到的位置开始播放
        seek.setOnSeekBarChangeListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.pre://
            if (index > 0) {
                index--;
                try {
                    // reset
                    player.reset();
                    // 设置资源
                    player.setDataSource(music_names[index]);
                    // 准备
                    player.prepare();
                    // 可以获取到音乐的大小
                    int duration = player.getDuration();
                    // 设置给进度条
                    seek.setMax(duration);
                    player.start();
                    // 发送消息
                    myHandler.sendEmptyMessageDelayed(0, 1000);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } else {
                Toast.makeText(MainActivity.this, "sorry 到顶了", 0).show();
            }
            break;
        case R.id.start:// 播放

            if (isPlaying) {
                player.pause();
                isPlaying = false;
                return;
            }

            try {
                // reset
                player.reset();
                // 设置资源
                player.setDataSource(music_names[index]);
                // 准备
                player.prepare();
                // 可以获取到音乐的大小
                int duration = player.getDuration();
                // 设置给进度条
                seek.setMax(duration);
                player.start();

                isPlaying = true;

                // 发送消息
                myHandler.sendEmptyMessageDelayed(0, 1000);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            break;
        case R.id.next:
            if (index < music_names.length - 1) {
                index++;
                try {
                    // reset
                    player.reset();
                    // 设置资源
                    player.setDataSource(music_names[index]);
                    // 准备
                    player.prepare();
                    // 可以获取到音乐的大小
                    int duration = player.getDuration();
                    // 设置给进度条
                    seek.setMax(duration);
                    player.start();
                    // 发送消息
                    myHandler.sendEmptyMessageDelayed(0, 1000);

                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } else {
                Toast.makeText(MainActivity.this, "sorry 没了", 0).show();
            }
            break;

        default:
            break;
        }
    }

    // handler
    class MyHandler extends Handler {
        @Override
        public void handleMessage(Message msg) {
            // 获取当期播放进度
            int position = player.getCurrentPosition();
            // 赋值给进度条
            seek.setProgress(position);
            // 继续发送

            // 判断,如果当前进度和歌曲的总长度相等,就停止发送消息
            if (position >= player.getDuration()) {
                myHandler.removeCallbacksAndMessages(null);
            } else {
                myHandler.sendEmptyMessageDelayed(0, 1000);
            }
        }
    }

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress,
            boolean fromUser) {

    }

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

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        /**
         * 1获取进度条的当前进度 2.将进度给player
         */
        int progress = seekBar.getProgress();
        player.seekTo(progress);
    }
}
 

发布了48 篇原创文章 · 获赞 45 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/hubianyu/article/details/81939358