标签:
1、寻找控件
2.扫描sdcard下的map3文件
3.将扫描的文件添加到集合list中,并展示出来
setAdapter();
4.为listview设置条目点击监听事件(开启音乐)
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
try {
cu = position;
//关闭timer任务(实时获取歌曲的进度)
stopTimer();
// 调用开启音乐的方法
startMusic(position);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
5、开始音乐的方法
private void startMusic(int position) throws IOException {
// 关闭正在播放的歌曲(避免播放多首歌曲)
if (player != null && player.isPlaying()) {
player.stop();
player.release();
player = null;
}
// 播放选中的歌曲
player = new MediaPlayer();
player.setDataSource(list.get(position).getPath());
player.prepare();
player.start();
//获取当前歌曲的总长度
int duration = player.getDuration();
//将歌曲 的总长度赋值给seekbar
seekbar.setMax(duration);
//使seekbar实时获取歌曲的进度
getProgress();
}
6、实时获取歌曲的进度
private void getProgress() {
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
//获取歌曲的进度
int p = player.getCurrentPosition();
//将获取歌曲的进度赋值给seekbar
seekbar.setProgress(p);
}
}, 0, 2000);
}
7、实现拖拽拖动条,歌曲可以以拖到的点接着播放歌曲(seekbar的监听事件)
//监听seekbar的进度
seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//获取进度条的进度
int p = seekBar.getProgress();
//将进度条的进度赋值给歌曲
player.seekTo(p);
//开始音乐继续获取歌曲的进度
getProgress();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
//取消timer任务
stopTimer();
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
}
});
}
8、从本activity跳转到另一个activity,然后再返回来,歌曲再继续播放
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
System.out.println("main----onStop");
stopTimer();
// 记录当前歌曲的进度
currentPosition = player.getCurrentPosition();
SharedPreferences share = getSharedPreferences("current", 0);
share.edit().putInt("id", currentPosition).putInt("nameid", cu)
.commit();
// 暂停歌曲
player.stop();
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
System.out.println("main----onRestart");
try {
// 重新开始歌曲
SharedPreferences share = getSharedPreferences("current", 0);
int i = share.getInt("id", 0);
player.prepare();
player.seekTo(i);
player.start();
//seekbar实时获取歌曲进度
getProgress();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}/*
* catch (IOException e) { // TODO Auto-generated catch block
* e.printStackTrace(); }
*/catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
9.//关闭timer
public void stopTimer()
{
if(timer!=null)
{
timer.cancel();
}
}
标签:
原文地址:http://www.cnblogs.com/8023-itxinde/p/5212240.html