需求:项目需要实现扫描本地sdcard上的所有音乐.并且可以进行播放,带可拖动进度条。
实现步骤:1.每个音乐文件在数据中有一条记录,开启一个线程查找数据库找出所有音乐文件,根据后缀名进行过滤,用handle通知ListView展示
2.ListView每一行设置单击事件,选中的那首歌曲进行播放。
3.ListView每一行都有seekBar,根据item选中进行显示隐藏。
1. activity文件 SelectMusicActivity.java
public class SelectMusicActivity extends Activity{
private final static int MUSIC_SCARCH_FINISH = 1;//音乐扫描完成
private ProgressDialog mProgressDialog;
private List musicFiles=new ArrayList();
private ListView listMusic;
private MyAdapter myAdapter;
private boolean isPlaying;//是否正在播放
private int currentPosition = -1;
private ViewHolder currentHolder;
private MediaPlayer mediaPlayer=new MediaPlayer();//音乐播放工具
private Handler mHandler=new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case MUSIC_SCARCH_FINISH://音乐扫描完成
mProgressDialog.dismiss();
listMusic.setAdapter(myAdapter=new MyAdapter());
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_select_music);
getMusicFloder();//查询本地所有音乐
listMusic=(ListView) findViewById(R.id.list_music);
}
@Override
protected void onDestroy() {
super.onDestroy();
if(null!=mediaPlayer){
mediaPlayer.release();
mediaPlayer=null;
isPlaying=false;
}
}
//-------------------------私有类 私有方法---------------------
private class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
// TODO Auto-generated method stub
return musicFiles.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return musicFiles.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@SuppressLint("ResourceAsColor")
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if(null==convertView){
holder=new ViewHolder();
convertView = LayoutInflater.from(SelectMusicActivity.this).inflate(R.layout.item_music_file,parent,false);
holder.musicInfo=(LinearLayout) convertView.findViewById(R.id.music_info);
holder.ivPlayState=(ImageView) convertView.findViewById(R.id.iv_play_state);
holder.musicFolderName=(TextView) convertView.findViewById(R.id.music_folder_name);
holder.musicDuration