音乐上下首切换

import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.TextView;


import com.example.lenovo.yinyuebf.bens.User;


import java.io.File;
import java.io.IOException;
import java.util.ArrayList;


public class SencodActivity extends AppCompatActivity implements View.OnClickListener {


    private Button button3;
    private Button button4;
    private Button button5;
    private SeekBar seekBar2;
    private TextView textView2;
    private ArrayList<User> list;
    private RecyclerView rv;
    private MediaPlayer mediaPlayer;
    private int in;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sencod);
        mediaPlayer = new MediaPlayer();
        list = new ArrayList<>();
        initData();
        initView();
        MyAdapter myAdapter = new MyAdapter(this, list);
        rv.setAdapter(myAdapter);
        myAdapter.setDian(new MyAdapter.Dian() {
            @Override
            public void setOnClick(View v, int position) throws IOException {
                in = position;
                try {


                    if(mediaPlayer.isPlaying()){
                        mediaPlayer.stop();
                        //在让他进入闲置状态
                        mediaPlayer.reset();
                    }
                    mediaPlayer.setDataSource(list.get(position).getPath());
                    mediaPlayer.prepare();
                    seekBar2.setMax(mediaPlayer.getDuration());
                    mediaPlayer.start();
                    handler.sendEmptyMessageDelayed(0,1000);
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                } catch (SecurityException e) {
                    e.printStackTrace();
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                }


            }
        });
    }


    private void initData() {
        File file=new File(Environment.getExternalStorageDirectory()+"/Music");
        File[] files = file.listFiles();
        for (File ff :files) {
            User user=new User(ff.getName(),ff.getPath(),"苗志红");
            list.add(user);
            Log.e("文件资源;",list.toString());
        }
    }


    private void initView() {
        button3 = (Button) findViewById(R.id.button3);
        button4 = (Button) findViewById(R.id.button4);
        button5 = (Button) findViewById(R.id.button5);
        seekBar2 = (SeekBar) findViewById(R.id.seekBar2);
        seekBar2.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) {
                if (mediaPlayer!= null && mediaPlayer.isPlaying()){
                    mediaPlayer.seekTo(seekBar.getProgress());
                }
            }
        });
        textView2 = (TextView) findViewById(R.id.textView2);


        button3.setOnClickListener(this);
        button4.setOnClickListener(this);
        button5.setOnClickListener(this);
        rv = (RecyclerView) findViewById(R.id.rv);
        rv.setLayoutManager(new LinearLayoutManager(this));
        rv.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button3:
                seekBar2.setProgress(0);
                in--;
                if (in < 0) {
                    try {
                        //把最后一首歌得位置赋值给size
                        in = list.size() - 1;
                        //以为上一首还在播放中所以要先让他停止播放
                        mediaPlayer.stop();
                        //在让他进入闲置状态
                        mediaPlayer.reset();
                        mediaPlayer.release();
                        mediaPlayer = new MediaPlayer();
                        //给媒体播放器设置最后一首歌的路径.注:如果写mlist.get(mlist.size() - 1)
                        // 这样那么点上一首的话会一直是这首歌,因为音乐的下标一直是负的,因为他没把改变后的下标再次赋值给size
                        mediaPlayer.setDataSource(list.get(in).getPath());
                        //让媒体播放器进入准备状态
                        mediaPlayer.prepare();
                        //给进度条设置最大值(最大值就是当前音乐getDuration(当前音乐的总时间))
                        seekBar2.setMax(mediaPlayer.getDuration());
                        handler.sendEmptyMessageDelayed(0,1000);
                        //开启
                        mediaPlayer.start();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } else {


                    try {
                        //暂停
                        mediaPlayer.stop();
                        //闲置
                        mediaPlayer.reset();
                        //获取上一首音乐的路径
                        mediaPlayer.setDataSource(list.get(in).getPath());
                        //准备
                        mediaPlayer.prepare();
                        ////给进度条设置最大值(最大值就是当前音乐getDuration(当前音乐的总时间))
                        seekBar2.setMax(mediaPlayer.getDuration());
                        //开始播放
                        mediaPlayer.start();
                        handler.sendEmptyMessageDelayed(0,1000);


                    } catch (IOException e) {
                        e.printStackTrace();
                    }


                }
                break;
            case R.id.button4:
                try {


                    if(mediaPlayer.isPlaying()){
                        mediaPlayer.stop();
                        //在让他进入闲置状态
                        mediaPlayer.reset();
                    }
                    mediaPlayer.setDataSource(list.get(in).getPath());
                    mediaPlayer.prepare();
                    seekBar2.setMax(mediaPlayer.getDuration());
                    mediaPlayer.start();
                    handler.sendEmptyMessageDelayed(0,1000);
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                } catch (SecurityException e) {
                    e.printStackTrace();
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                }




                break;
            case R.id.button5:
                seekBar2.setProgress(0);
                in++;
                if (in > list.size() - 1) {
                    in = 0;
                    mediaPlayer.stop();
                    mediaPlayer.reset();
                    mediaPlayer.release();
                    mediaPlayer = new MediaPlayer();
                    try {
                        mediaPlayer.setDataSource(list.get(in).getPath());
                        mediaPlayer.prepare();
                        seekBar2.setMax(mediaPlayer.getDuration());
                        handler.sendEmptyMessageDelayed(0,1000);
                        mediaPlayer.start();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }


                } else {
                    mediaPlayer.stop();
                    mediaPlayer.reset();
                    try {


                        mediaPlayer.setDataSource(list.get(in).getPath());
                        mediaPlayer.prepare();
                        seekBar2.setMax(mediaPlayer.getDuration());
                        handler.sendEmptyMessageDelayed(0,1000);
                        mediaPlayer.start();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                break;
        }
    }
    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            //设置当前歌曲的总时长
            int duration =  mediaPlayer.getCurrentPosition()/1000; //默认单位为毫秒
            textView2.setText(duration/60+":"+duration%60); // 除60-》分,摩60-》秒
            seekBar2.setProgress( mediaPlayer.getCurrentPosition());
            sendEmptyMessageDelayed(0,1000);


        }
    };
}

猜你喜欢

转载自blog.csdn.net/weixin_42376563/article/details/80773269