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);
}
};
}
音乐上下首切换
最新推荐文章于 2021-12-30 12:03:39 发布