第一步:创建适配器控件
第二步:创建适配器
第三步:绑定适配器
第五步:使用Thread和SeekBar实现进度条
MainActivity
public class MainActivity extends Activity {
private ListView musicListView;
private ContentResolver resolver;
private List<MusicVO> musicList = new ArrayList<MusicVO>();
private MediaPlayer mediaPlayer;
private int currentPosition;
private Button pre;
private Button next;
private Button play;
private Button stop;
private SeekBar seekbar;
private Thread thread;
private boolean isStop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
musicListView = (ListView) findViewById(R.id.musiclistview);
initData();
MusicAdapter adapter = new MusicAdapter(this, musicList);
musicListView.setAdapter(adapter);
mediaPlayer = new MediaPlayer();
musicListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
currentPosition = position;
play();
play.setText("暂停");
}
});
initView();
seekbar = (SeekBar) findViewById(R.id.seekbar);
}
private void initView() {
pre = (Button) findViewById(R.id.prebtn);
next = (Button) findViewById(R.id.nextbtn);
play = (Button) findViewById(R.id.playbtn);
stop = (Button) findViewById(R.id.stopbtn);
pre.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
previous();
}
});
next.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
next();
}
});
play.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
play.setText("播放");
} else {
mediaPlayer.start();
play.setText("暂停");
}
}
});
stop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.stop();
play.setText("播放");
seekbar.setProgress(0);
isStop = true;
}
});
}
/**
* 初始化数据,获取手机中的音乐文件,并添加至list列表中
*/
private void initData() {
resolver = getContentResolver();
Cursor cursor = resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null,
null, null);
cursor.moveToFirst();
for (int i = 0; i < cursor.getCount(); i++) {
String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
String singer = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
MusicVO music = new MusicVO();
music.setName(name);
music.setSinger(singer);
music.setPath(path);
musicList.add(music);
cursor.moveToNext();
}
cursor.close();
}
/**
* 播放
*/
private void play() {
isStop = false;
try {
mediaPlayer.reset();
mediaPlayer.setDataSource(musicList.get(currentPosition).getPath());
mediaPlayer.prepare();
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
next();
}
});
seekbar.setMax(mediaPlayer.getDuration());
thread = new Thread(new SeekBarThread());
thread.start();
} catch (IllegalArgumentException | SecurityException | IllegalStateException
| IOException e) {
e.printStackTrace();
}
}
/**
* 下一曲
*/
private void next() {
if (currentPosition == musicList.size() - 1) {
currentPosition = 0;
} else {
currentPosition = currentPosition + 1;
}
play();
}
/**
* 上一曲
*/
private void previous() {
if (currentPosition == 0) {
currentPosition = musicList.size() - 1;
} else {
currentPosition = currentPosition - 1;
}
play();
}
private class SeekBarThread implements Runnable {
@Override
public void run() {
while (mediaPlayer != null && isStop == false) {
seekbar.setProgress(mediaPlayer.getCurrentPosition());
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
MyAdapter
public class MusicAdapter extends BaseAdapter{
private Context mContext;
private List<MusicVO> mList;
public MusicAdapter(Context context,List<MusicVO> list) {
this.mContext = context;
this.mList = list;
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(mContext);
View v = inflater.inflate(R.layout.item, null);
TextView nameText = (TextView) v.findViewById(R.id.name_view);
TextView singerText = (TextView) v.findViewById(R.id.singer_view);
nameText.setText(mList.get(position).getName());
singerText.setText(mList.get(position).getSinger());
return v;
}
}