音乐播放器:
作业内容:要求制作音乐播放器,实现基本功能。
实现效果截图:
项目代码链接: https://git.coding.net/GreatDruid/1600802109_2.git
APK链接:https://git.coding.net/GreatDruid/1600802109_2_musicplayerAPK.git
项目描述:
基本还原实验要求效果,在原本老师发的代码里做了改动:
- 实现播放/暂停,播放上一首,下一首功能(切歌功能)
- 实现了从内存卡读取全部.mp3文件,并在界面上按字母排序显示播放列表
- 按照老师的拓展要求实现了进度条更新、进度条的拖动以及时间线显示的更新(自学)
部分核心代码:
音乐列表:
1 private void ListViewer() { 2 List<File> list = new ArrayList<File>(); 3 //通过finAll()递归查询获取所有音乐并进行排序 4 findAll(Environment.getExternalStorageDirectory(), list); 5 Collections.sort(list); 6 7 data = new ArrayList<Map<String, String>>(); 8 for (File file : list) { 9 Map<String, String> map = new HashMap<String, String>(); 10 map.put("name", file.getName()); 11 map.put("path", file.getAbsolutePath()); 12 data.add(map); 13 }
14 SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item, new String[] { "name" }, new int[] { R.id.mName }); 15 listView.setAdapter(adapter); 16 listView.setOnItemClickListener(new MyItemListener()); 17 }
切歌按键响应:
1 public void onClick(View view) { 2 if (view.getId()==R.id.PreBtn) changeMusic(--CurPosi); 3 else if (view.getId()==R.id.PlayBtn){ 4 if (Player==null) changeMusic(0); 5 else { 6 if (Player.isPlaying()) Player.pause(); 7 else Player.start(); 8 } 9 } 10 else if (view.getId()==R.id.NextBtn) changeMusic(++CurPosi); 11 }
进度条的拖动:
1 // 进度条的滑动更新改变 2 public class MoveSeekBar implements SeekBar.ChangeListener { 3 public void changeProgress(SeekBar seekBar, int progress, boolean fromUser) { 4 } 5 6 public void startTracking(SeekBar seekBar) { 7 isSeekBarChanging = true; 8 } 9 //后台Timer中断,以免在滑动进度条时产生冲突 10 public void stopTracking(SeekBar seekBar) { 11 isSeekBarChanging = false; 12 mediaPlayer.seekTo(seekBar.getProgress()); 13 } 14 }
更新音乐播放进程:
1 private void updateProgress() { 2 Message msg = Message.obtain(); 3 int progress = Player.getCurrentPosition(); 4 msg.arg1 = progress; 5 mHandler.sendMessageDelayed(msg, INTERNAL_TIME); 6 }
时间显示的更新,以及时间的格式化显示:
1 private String parseTime(int oldTime) { 2 SimpleDateFormat sdf = new SimpleDateFormat("mm:ss"); 3 String newTime = sdf.format(new Date(oldTime)); 4 return newTime; 5 }